• 20191318实验二 Python程序设计入门


    20191318 《Python程序设计》实验二报告

    课程:《Python程序设计》
    班级: 1913
    姓名: 王泽文
    学号:20191318
    实验教师:王志强
    实验日期:2020年4月11日
    必修/选修: 公选课

    1. 实验内容

    • 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
    • 考核基本语法、判定语句、循环语句、逻辑运算等知识点

    2. 实验过程及结果

    1. 对于一个计算器,其拥有的功能很重要。因此,我首先想到的是实现加减乘除、求模和幂函数这几个简单的功能。这几个功能也比较简单,容易实现

    代码如下

    # 加法
    def add(a, b):
       return a + b
    # 减法
    def minus(a, b):
       return a - b
    # 乘法
    def mul(a, b):
       return a * b
    # 除法
    def div(a, b):
       if b == 0:
           print("Error")
       else:
           return a / b
    # 求模
    def mod(a, b):
       return a % b
    # 幂运算
    def power(a, b):
       return a ** b
    print("1:加法 2:减法 3:乘法 4:除法 5:求模 6:幂运算
    ")
    s = int(input("请输入运算方法:"))
    n1 = float(input("请输入第一个数:"))
    n2 = float(input("请输入第二个数:"))
    print("结果为:")
       if s == 1:
           print(add(n1, n2))
       if s == 2:
           print(minus(n1, n2))
       if s == 3:
           print(mul(n1, n2))
       if s == 4:
           print(div(n1, n2))
       if s == 5:
           print(mod(n1, n2))
       if s == 6:
           print(power(n1, n2))
    

    一个拥有基本功能的计算器完成了。
    效果如图
    基本功能效果

    1. 在实现计算器的基本功能后,我继续思考,能不能进行多次计算,即计算一段表达式。于是我进行上网查询,发现可以使用eval()函数来进行运算,但也了解到eval()函数的使用可能会有安全性的问题。

    代码如下

    # 表达式运算
    def test(date):
       result = eval(date)
       return result
    print("支持加减乘除和求模(%)与幂函数(**)
    示例:3+4-(3-2)**2")
    m = input("请输入表达式:")
    print("结果为:", test(m))
    

    效果如图
    表达式运算效果

    1. 作为一个理科生,仅有简单的计算功能怎么能满足呢,于是,我想加入一些高级的功能,如三角函数、开方等。而这些更高级的功能,简单的代码已经很难实现,于是,就要引入Python中的math函数库。

    代码如下

    import math
    print("1:对数函数 2:开方 3:向下取整 4:向上取整 5:弧度转换角度 6:角度转换弧度 7:正弦函数 8:余弦函数 9:正切函数 10:最大公约数")
    s = int(input("请输入运算方法:"))
    if s == 1:
       print("对数运算")
       n3 = float(input("请输入运算数:"))
       n4 = float(input("请输入底数:"))
       print("结果为:", math.log(n3, n4))
    elif s == 10:
       print("最大公约数")
       n5 = float(input("请输入第一个运算数:"))
       n6 = float(input("请输入第二个运算数:"))
       print("结果为:", math.gcd(n5, n6))
    elif 2 <= s <= 9:
       n7 = float(input("请输入运算数(三角函数仅输入弧度制pi前的系数):"))
       if s == 2:
           print("开方运算
    结果为:", math.sqrt(n7))
       if s == 3:
           print("向下取整
    结果为:", math.trunc(n7))
       if s == 4:
           print("向上取整
    结果为:", math.ceil(n7))
       if s == 5:
           print("弧度转换角度
    结果为:", math.degrees(n7))
       if s == 6:
           print("角度转换弧度
    结果为:", math.radians(n7))
       if s == 7:
           print("正弦函数
    结果为:", math.sin(math.pi*n7))
       if s == 8:
           print("余弦函数
    结果为:", math.cos(math.pi*n7))
       if s == 9:
           print("正切函数
    结果为:", math.tan(math.pi*n7))
    

    效果如图
    高级功能

    1. 所需功能均已实现,接下来就是整合到一起了,使用while循环实现计算器的多次使用,再用if语句进行功能选择。
      当需要退出时使用break
       elif i == 0:
          break
    

    代码如下

    while True:
        print("计算器")
        i = int(input("基本运算输1,表达式运算输2,高级功能输3,输0退出
    请输入:"))
        if i == 1:
            print("1:加法 2:减法 3:乘法 4:除法 5:求模 6:幂运算
    ")
            s = int(input("请输入运算方法:"))
            n1 = float(input("请输入第一个数:"))
            n2 = float(input("请输入第二个数:"))
            print("结果为:")
            if s == 1:
                print(add(n1, n2))
            if s == 2:
                print(minus(n1, n2))
            if s == 3:
                print(mul(n1, n2))
            if s == 4:
                print(div(n1, n2))
            if s == 5:
                print(mod(n1, n2))
            if s == 6:
                print(power(n1, n2))
        elif i == 2:
            print("支持加减乘除和求模(%)与幂函数(**)
    示例:3+4-(3-2)**2")
            m = input("请输入表达式:")
            print("结果为:", test(m))
        elif i == 3:
            print("1:对数函数 2:开方 3:向下取整 4:向上取整 5:弧度转换角度 6:角度转换弧度 7:正弦函数 8:余弦函数 9:正切函数 10:最大公约数")
            s = int(input("请输入运算方法:"))
            if s == 1:
                print("对数运算")
                n3 = float(input("请输入运算数:"))
                n4 = float(input("请输入底数:"))
                print("结果为:", math.log(n3, n4))
            elif s == 10:
                print("最大公约数")
                n5 = float(input("请输入第一个运算数:"))
                n6 = float(input("请输入第二个运算数:"))
                print("结果为:", math.gcd(n5, n6))
            elif 2 <= s <= 9:
                n7 = float(input("请输入运算数(三角函数仅输入弧度制pi前的系数):"))
                if s == 2:
                    print("开方运算
    结果为:", math.sqrt(n7))
                if s == 3:
                    print("向下取整
    结果为:", math.trunc(n7))
                if s == 4:
                    print("向上取整
    结果为:", math.ceil(n7))
                if s == 5:
                    print("弧度转换角度
    结果为:", math.degrees(n7))
                if s == 6:
                    print("角度转换弧度
    结果为:", math.radians(n7))
                if s == 7:
                    print("正弦函数
    结果为:", math.sin(math.pi*n7))
                if s == 8:
                    print("余弦函数
    结果为:", math.cos(math.pi*n7))
                if s == 9:
                    print("正切函数
    结果为:", math.tan(math.pi*n7))
        elif i == 0:
            break
    

    效果如图

    代码链接

    1. 在实现想要的功能后,我还想让我的计算器更加美观,于是我加入窗口化的运行。
    • 引入tkinter进行窗口化设计。在窗口化时简单的功能可以合并到表达式的计算中去。
    • 高级功能整合到菜单栏或新开一个窗口



    1. 一个计算器的编写就完成了
      代码链接https://gitee.com/python_programming/wzw20191318/blob/2d5c7ef6ddf562d44afaf4bc7c6525afd921511b/计算器gui.py

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

    1. 计算三角函数时为弧度制,使用不方便

    解决方法:在计算时引入math.pi进行处理

    1. 在使用eval()函数时能运行命令行,有安全风险

    解决方法:在调用函数前先检查是否有非法字符

    1. 在tkinter中设置按钮时无法正常调用函数

    解决方法:在要调用的函数前再用lambda:调用

    b1 = ttk.Button(win0, text='关闭', command=lambda: win0.destroy())
    b1.grid(column=0, row=1)
    

    4. 思考和感悟

    • 在编写代码之前要对自己希望实现的功能和效果有大致的认识,逻辑也需要较为清楚。

    参考资料

    math库学习https://www.cnblogs.com/xiaoyh/p/9791670.html
    https://blog.csdn.net/weixin_42795087/article/details/89931944
    https://www.cnblogs.com/mxh1099/p/5386529.html

  • 相关阅读:
    retain和copy的区别 #import @class 的区别
    UImageview加边框 加阴影
    iOS中有两种支持机制:Notification和KVO(KeyValue Observing)
    Windows上编译,学习Objectivec
    CAAnimation动画
    ObjectiveC 熟记小概念
    cocos2d工具大全
    cocos2d 0.99.5版本屏幕默认是横屏,怎么修改为竖屏呢?
    ObjectiveC 的 self 和 super 详解
    ObjectiveC 的属性与合成方法使用详解
  • 原文地址:https://www.cnblogs.com/wzwyoshino/p/12681630.html
Copyright © 2020-2023  润新知