zoukankan      html  css  js  c++  java
  • 20191206 实验二《Python程序设计》实验报告

    学号 2019-2020-2 《Python程序设计》实验二报告

    课程:《Python程序设计》
    班级: 1912
    姓名: 陈发强
    学号: 20191206
    实验教师:王志强
    实验日期:2020年4月19日
    必修/选修: 公选课

    1.实验内容

    • 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。

    • 考核基本语法、判定语句、循环语句、逻辑运算等知识点

    2. 实验过程及结果

    pre = '''
    加减乘除  取模 整除 运算符 小括号 分别为 + - * / %  //  ()
    例如   (2+2-1)*5 % 4    -->  3   ;  10//7  -->  1
    取绝对值            abs()     例如  abs(-2) -->  2
    
    平方                sqr()    例如 sqr(2) -> 4 
    三次方              cube()   例如 cube(2) -> 8
    n次方      pow(底数,指数)   例如 pow(2,4)-> 16
    
    开方               sroot()   例如 sroot(4) -> 2   
    三次根号           croot()   例如 croot(8) ->2
    n次根号    nroot(底数,次数)例如 nroot(8,3) ->2
    
    log       log(真数,底数)  例如 log(4,2) -> 2
    ln        ln(真数)           例如 ln(2.72) -> 1.0006
    
    阶乘               fac()     例如 fac(5)  ->  120
    
    十进制转二进制     bi()      例如 bi(10)  -> 1010
    十进制转八进制     oc()      例如 oc(10)  ->  12
    十进制转十六进制   he()      例如 he(10)  ->  A
    
    二进制转十进制     abbi()    例如 abbi(10100) -> 20
    八进制转十进制     aboc()    例如 aboc(1010) -> 520
    十六进制转10进制   abhe(" ") 例如 abhe("AB") 或者 abhe("ab") -> 171
    
    圆周率 =     pi              例如 pi * 2  ->6.28...
    自然对数 =   e               例如 e * 2 ->  5.42...
    
    '''
    import math
    instruction = '使用手册'
    print("{:*^40}
    {}".format(instruction,pre))
    
    pi = math.pi
    e = math.e
    
    def sqr(a):
        result = a * a
        return result
    def cube(a):
        result = a * a * a
        return result
    
    
    def sroot(a):
        result = pow(a,0.5)
        return result
    def croot(a):
        result = pow(a,1/3)
        return result
    def nroot(a,n):
        result = pow(a,1/n)
        return result
    
    
    def log(a,n):
        result = math.log(a,n)
        return result
    def ln(a):
        result = math.log(a)
        return result
    
    def fac(a):
        result = 1
        for i in range(1,a+1):
            result *= i
        return result
    def bi(a):
        result = bin(a)[2:]
        return result
    def oc(a):
        result = oct(a)[2:]
        return result
    def he(a):
        result = hex(a)[2:].upper()
        return result
    
    def abbi(a):
        result = 0
        n = 0
        while a//10 != 0 :
            result += (a%10) * pow(2,n)
            n += 1
            a //= 10
        result += (a%10) * pow(2,n)
        return result    
    def aboc(a):
        result = 0
        n = 0
        while a//10 != 0 :
            result += (a%10) * pow(8,n)
            n += 1
            a //= 10
        result += (a%10) * pow(8,n)
        return result
    def abhe(a):
        le = len(a)
        result = 0
        ls = [0] * le
        for i in range(le):
            if a[i] == 'a' or a[i] == 'A':
                ls[i] = 10
            elif a[i]=='b' or a[i] =='B':
                ls[i] = 11
            elif a[i]=='c' or a[i] =='C':
                ls[i] = 12
            elif a[i]=='d' or a[i] =='D':
                ls[i] = 13
            elif a[i]=='e' or a[i] =='E':
                ls[i] = 14
            elif a[i]=='f' or a[i] =='F':
                ls[i] = 15
            else :
                ls[i] = int(a[i])
            result += ls[i] * pow(16,le-i-1)
    
        return result
    while True:
        scanf = input("请输入算式
    按回车键退出程序
    ")
        if  scanf  == '':
            break
        else:
            try:
                result = eval(scanf)
                print("
    计算结果为{}
    ".format(result))
            except:
                print("格式错误!
    ")
    







    实验结果还是很满意的,做到了 电脑自带科学计算机的所有功能,像 加减乘除,取模、整除,对数、指数、幂函数,阶乘,绝对值,以及自带常见的无理数,圆周率 pi 和自然对数 e ,

    还完成了十进制转 二进制,八进制,十六进制 ,此外还完成了 我电脑上没有的 二进制,八进制,十六进制转十进制

    而且界面更加友好,键盘输入比鼠标点计算器的各种按钮 方便快捷的多

    这回程序的异常处理也加上了,就算用户错误的输入了一些非法的东西,程序也不会出现异常,还能继续运行,等待下一次输入

    程序还可以反复输入算式,而不是每算一次算式,都要重启一次程序

    3. 实验过程中遇到的问题和解决过程

    • 问题1:如何做到,一直计算,算完一个题不用重启程序就能继续算下一道题,直到“按回车键才退出程序”

    • 问题1解决方案:首先思考按回车键退出程序,按回车键对于计算机是什么意义。经过思考并查证后发现,回车键退出程序就是当input接收到空字符串的时候退出程序。因此需要使用判断语句,像

        a = input("请输入")
        if a == '':
            exit(0)
      

    这样就能做到回车退出程序了

    • 问题2:如何使异常处理能够循环执行,即如果进入了except 还想返回继续执行 try

    • 问题2解决方案:首先思考了一下,进入了except 后,怎么回到 try ,后来发现这是我做不到的,进入except后,后面只能再进入 else 语句 或者 finally 语句 ,如果finally 里面填和 try 语句中 相同的代码,那么如果try 语句再出错,就不得不再进入except 语句,而我们还想继续执行try语句,就不得不再加第二层finally 语句 ,所以就没完没了。
      后来发现应该换个思考角度,不应该钻进except 后面再进入 try 的死胡同,而应该表述成,我要循环执行try 语句,如果 用户输入后,程序出错,则进入except,如果不出错,输出结果后,再进入循环即可。
      因此,再异常处理外面,整体加上一个 无限循环语句即可,
      想回车退出程序时,break 即可

        while True:
            try:
                a = input("请输入")
                if a == '':
                    break
                else:
                    print("result")
            except:
                    print("输入格式有误")
      
    • 问题3:十六进制转二进制的时候,由于函数输入的带字母,而字母又是未定义的变量,导致程序出错。如果要用户输入字符串,又不能直接通过索引的方式直接对字符串中的字母进行重新赋值。

    • 问题3解决方案:问题的症结在于,函数接受参数的时候,参数中有未定义的变量,然后我就想,如果在函数内部先把变量定义好了行不行,不如 a = 10,
      b = 11, c = 12... 经调试发现不行,因为如果字母连在一起,就又是一个未定义的新的变量 像 abc 就是未定义的。
      所以只好把用户的输入切分成单个的字符,所以用户的输入也只好是字符串了,
      本来想偷懒用str.split() 方法直接返回一个列表,但可惜,不会自动切分没有分隔符(像空格 逗号 句号 ...)的字符串
      所以只好新建一个列表,用字符串索引,将每个字符进行相应的操作后,填入列表的对应位置,
      然后再对列表进行操作

    其他(感悟、思考等)

    很多问题最开始不会解决,不一定是自己的知识不够,能力不够,而是没有经过反复的思考,没有活学活用已掌握的知识和技能,或者说,理解的还不够到位。

    问题虽然还是那个问题,但如果通过反复的琢磨,就能将问题理解的更加透彻,尤其是能进行更细致的模块化,将问题进行分解,进而像搭积木一样,一点点的解决问题。

    其实大多数的问题都能通过循环语句和条件语句解决掉,自己对循环语句和条件语句的理解还不够到位,应用还不够灵活。

    参考资料

    无参考资料,纯原创,用IDLE查了点python的库函数

  • 相关阅读:
    SQL语句熟悉
    CSS3 attribute
    轮播器
    PHP 邮箱操作的Action
    Hole puncher Show Picture
    力扣算法——133.CloneGraph【M】
    力扣算法——134GasStation【M】
    力扣算法——135Candy【H】
    力扣算法——136SingleNumber【E】
    力扣算法——137SingleNumberII【M】
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/12727988.html
Copyright © 2011-2022 走看看