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

20201324 2020-2021-2 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 2013
姓名: 徐源
学号:20201324
实验教师:王志强
实验日期:2021年4月26日
必修/选修: 公选课

(一)实验内容

  • 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
    • 基本四则运算
    • 取模运算
    • 求幂运算
    • 计算简单的三角函数
    • 求阶乘
    • 解一元二次方程
  • 考核基本语法、判定语句、循环语句、逻辑运算等知识点

(二)实验过程及结果

思路:先分别编写代码,实现不同功能,再将这些功能代码以函数的形式组合起来

1.基本四则运算

因四则运算相对较复杂,故希望通过设计函数来实现

def arithmetic(a, b, operator):
    if operator == "+":
        return a + b
    elif operator == "-":
        return a - b
    elif operator == "*":
        return a * b
    elif operator == "/":
        return a / b

负责判断、调用和打印的主函数如下

flag = 1
while flag == 1:
    operator = input("请输入你要做的运算:+,-,*,%,//,%,**,sin,cos:")
    a = int(input("输入一个数a:"))
    b = int(input("输入一个数b:"))
    print("a" + operator + "b = ", arithmetic(a, b, operator))
    flag = int(input("继续请输入1,退出请输入0"))

2.取模运算

print("请按照提示输入取模运算的两个操作数,注意两者均为整数")
x = int(input("请输入被除数:"))
y = int(input("请输入除数:"))
while y == 0:
    print("输入错误!除数不能为0!")
    y = int(input("请重新输入整数除数:"))
print(x % y)

3.求幂运算

a = float(input("请输入底数:"))
b = float(input("请输入指数:"))
print("a**b = ",a**b)

4.计算简单的三角函数

这里注意要把我们惯常使用的角度制转成弧度制

这一部分涉及六种三角函数,较复杂,编写函数实现

import math
def act(x):
    if operator == "sin":
        return math.sin(x)
    elif operator == "cos":
        return math.cos(x)
    elif operator == "tan":
        return math.tan(x)
    elif operator == "asin":
        return math.asin(x)
    elif operator == "acos":
        return math.acos(x)
    elif operator == "atan":
        return math.atan(x)

flag = 1
while flag == 1:
    operator = input("请输入你要做的运算:sin,cos,tan,asin,acos,atan:")
    x = float(input("请输入数值:"))
    x = x / 180 * math.pi
    print(operator + "x = ",  act(x))
    flag = int(input("继续请输入1,退出请输入0"))

5.求阶乘

import math
n = int(input("请输入一个整数:"))
print("n! = ",math.factorial(n))

6.解一元二次方程

def qua():
    a = float(input("请输入a:"))
    b = float(input("请输入b:"))
    c = float(input("请输入c:"))
    d = b*b - 4*a*c
    if d>=0:
        x1 = (-b+math.sqrt(d)) / (2*a)
        x2 = (-b-math.sqrt(d)) / (2*a)
        if d==0:
            return "X1 = X2 = "+str(x1)
        else:
            return "X1 = "+str(x1)+'\t'+"X2 = "+str(x2)
    else:
        x1 = str(-b/(2*a)) + '+' + str(math.sqrt(-d)/(2*a)) + 'i'
        x2 = str(-b/(2*a)) + '-' + str(math.sqrt(-d)/(2*a)) + 'i'
        return "X1 = "+x1+'\t'+"X2 = "+x2

将上述代码分装成不同函数,在主函数中根据用户的选择来完成调用

7.完整代码

import math
def arithmetic(a, b, operator):
    if operator == "+":
        return a + b
    elif operator == "-":
        return a - b
    elif operator == "*":
        return a * b
    elif operator == "/":
        return a / b
    elif operator == "//":
        return a // b
    elif operator == "%":
        return a % b


def act(x,operator):
    if operator == "sin":
        return math.sin(x)
    elif operator == "cos":
        return math.cos(x)
    elif operator == "tan":
        return math.tan(x)
    elif operator == "asin":
        return math.asin(x)
    elif operator == "acos":
        return math.acos(x)
    elif operator == "atan":
        return math.atan(x)


def operation1():
    print("现在进行 1.基本四则运算")
    operator = input("请输入你要做的运算:+,-,*,/,//,%:")
    a = int(input("输入一个数a:"))
    b = int(input("输入一个数b:"))
    print("a" + operator + "b = ", arithmetic(a, b, operator))


def operation2():
    print("现在进行 2.取模运算")
    print("请按照提示输入取模运算的两个操作数,注意两者均为整数")
    x = int(input("请输入被除数:"))
    y = int(input("请输入除数:"))
    while y == 0:
        print("输入错误!除数不能为0!")
        y = int(input("请重新输入整数除数:"))
    print(x % y)


def operation3():
    print("现在进行 3.求幂运算")
    a = float(input("请输入底数:"))
    b = float(input("请输入指数:"))
    print("a**b = ", a ** b)



def operation4():
    print("现在进行 4.计算简单的三角函数")
    operator = input("请输入你要做的运算:sin,cos,tan,asin,acos,atan:")
    x = float(input("请输入数值:"))
    x = x / 180 * math.pi
    print(operator + "x = ", act(x,operator))


def operation5():
    print("现在进行 5.求阶乘")
    n = int(input("请输入一个整数:"))
    print(n,"! = ", math.factorial(n))


def operation6():
    print("现在进行 6.解一元二次方程")
    a = float(input("请输入a:"))
    b = float(input("请输入b:"))
    c = float(input("请输入c:"))
    d = b*b - 4*a*c
    if d>=0:
        x1 = (-b+math.sqrt(d)) / (2*a)
        x2 = (-b-math.sqrt(d)) / (2*a)
        if d==0:
            print("X1 = X2 = "+str(x1))
        else:
            print("X1 = "+str(x1)+'\t'+"X2 = "+str(x2))
    else:
        x1 = str(-b/(2*a)) + '+' + str(math.sqrt(-d)/(2*a)) + 'i'
        x2 = str(-b/(2*a)) + '-' + str(math.sqrt(-d)/(2*a)) + 'i'
        print("X1 = "+x1+'\t'+"X2 = "+x2)


flag = 1
while flag == 1:
    print("欢迎使用计算器!")
    print("*" * 20)
    print("本计算器提供的功能有:")
    print("1.基本四则运算")
    print("2.取模运算")
    print("3.求幂运算")
    print("4.计算简单的三角函数")
    print("5.求阶乘")
    print("6.解一元二次方程")
    print("如您想退出使用,请输入-1")
    print("*" * 20)
    t = int(input("请从中选择您想要实现的功能,输入对应的数字"))
    if t == 1:
        operation1()
    elif t==2:
        operation2()
    elif t==3:
        operation3()
    elif t==4:
        operation4()
    elif t==5:
        operation5()
    elif t==6:
        operation6()
    flag = int(input("继续请输入1,退出请输入-1"))

运行结果

(三)实验过程中遇到的问题和解决过程

  • 问题1:对使用python函数不熟练,def NAME后面经常不加":",对于系统给出的报错信息不敏锐
  • 问题1解决方案:多写多总结,与c语言对比,总结差异
  • 问题2:在分别编写每一个功能代码时,有的直接写成函数形式,有return 标志的返回值;有的因较为简单,没有采用函数形式,采用的是print;最后将各部分汇总时很不方便,需要逐一排查
  • 问题2解决方案:这次因为都已写好,难以修改,只能逐一运行测试。以后编写时应尽量统一,我习惯在编写每个部分时不写成函数形式,而在最终整合时统一改成函数形式,这样比较方便统计需要传哪些参数

(四) 其他(感悟、思考等)

python和c还是经常在语法上搞混,但经过一段时间的学习,在一些二者的常见不同上已有了一定的敏锐性。本次实验最大障碍是对python中的函数调用掌握不足,什么时候return,什么时候直接在函数中打印有点迷糊。接下来一定继续努力,掌握透彻

(五)参考资料

(六)码云链接

https://gitee.com/xu-yuan-20201324/python_use/blob/main/calculator.py

posted @ 2021-04-27 01:06  20201324徐源  阅读(1373)  评论(0编辑  收藏  举报