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

20242115 2024-2025-2 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 2421
姓名: 叶抒宇
学号:20242115
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课

一、实验内容

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

二、实验过程及结果

过程:

  1. 在IDE中编写计算器的代码,实现了实数的加、减、乘、除、取模、指数、对数运算和复数的加、减、乘、除运算,对用户可能的输入错误进行了处理,并通过git上传至仓库中的ex2.py。
# Copyright 20242115ysy
import math

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

def mul(a, b):
    return a * b

def div(a, b):
    if b == 0:
        print("除数不能为0!")
        return math.nan
    return a / b

def mod(a, b):
    if b == 0:
        print("除数不能为0!")
        return math.nan
    return a % b

def pow(a, b):
    return a ** b

print("""
★★★★★★★★★★★★★★★★★★★★
      欢迎使用计算器!
      ©20242115叶抒宇
★★★★★★★★★★★★★★★★★★★★
""")
while True:
    while True:
        try:
            choice = int(input("请选择工作模式:\n1. 实数\n2. 复数\n"))
        except ValueError:
            print("输入错误!")
            continue
        break
    if choice == 1:
        while True:
            try:
                num1 = float(input("请输入一个实数:"))
            except ValueError:
                print("输入错误!")
                continue
            break
        op = input("请输入运算符(+,-,*,/,%,log):")
        while True:
            try:
                num2 = float(input("请输入另一个实数:"))
            except ValueError:
                print("输入错误!")
                continue
            break
    elif choice == 2:
        while True:
            try:
                num1 = complex(input("请输入一个复数(a+bj):"))
            except ValueError:
                print("输入错误!")
                continue
            break
        op = input("请输入运算符(+,-,*,/):")
        while True:
            try:
                num2 = complex(input("请输入另一个复数(a+bj):"))
            except ValueError:
                print("输入错误!")
                continue
            break
    else:
        print("输入错误,请重新输入!")
        continue
    if op == "+":
        result = add(num1, num2)
    elif op == "-":
        result = sub(num1, num2)
    elif op == "*":
        result = mul(num1, num2)
    elif op == "/":
        result = div(num1, num2)
    elif op == "%" and choice == 1:
        result = mod(num1, num2)
    elif op == "^" and choice == 1:
        result = pow(num1, num2)
    elif op == "log" and choice == 1:
        result = math.nan
        print("log_{", num1, "}", num2, "=", math.log(num2, num1))
    else:
        print("非法运算符!")
        continue
    if not math.isnan(result):
        print(num1, op, num2, "=", result)
    confirm = input("是否继续?(Y/N)")
    if not (confirm == "Y" or confirm == "y"):
        break

结果:程序运行正常,代码已上传。

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

  • 问题1:使用False标记不输出的result,结果为0时会误判
  • 问题1解决方案:Python中False0相等,改用math.nan
  • 问题2:直接判断result != math.nan永远为True
  • 问题2解决方案:Python中math.nan不可比较,改用math.isnan(result)

其他(感悟、思考等)

  1. Python可以直接处理复数,相比C语言等更便捷,可见它在科研领域较有优势。
  2. 在处理NaN的时候要注意NaN是不可比较的。
  3. 应考虑用户输入错误的情况,并作出处理,提升程序健壮性。
while True:
    try:
        num1 = float(input("请输入一个实数:"))
    except ValueError:
        print("输入错误!")
        continue
    break

参考资料

posted @ 2025-03-26 20:33  ysy24  阅读(35)  评论(0)    收藏  举报