zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    DRUPAL-PSA-CORE-2014-005 && CVE-2014-3704 Drupal 7.31 SQL Injection Vulnerability /includes/database/database.inc Analysis
    WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
    Penetration Testing、Security Testing、Automation Testing
    Tomcat Server Configuration Automation Reinforcement
    Xcon2014 && Geekpwn2014
    phpMyadmin /scripts/setup.php Remote Code Injection && Execution CVE-2009-1151
    Linux System Log Collection、Log Integration、Log Analysis System Building Learning
    The Linux Process Principle,NameSpace, PID、TID、PGID、PPID、SID、TID、TTY
    Windows Management Instrumentation WMI Security Technology Learning
    IIS FTP Server Anonymous Writeable Reinforcement, WEBDAV Anonymous Writeable Reinforcement(undone)
  • 原文地址:https://www.cnblogs.com/wzwyoshino/p/12681630.html
Copyright © 2011-2022 走看看