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

学号 2024-2025-2 《Python程序设计》实验x报告

课程:《Python程序设计》
班级: 2413
姓名: 顾创
学号:20241321
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课

一.实验内容

1.设计并完成一个完整的计算器,完成加减乘除模等运算,功能多多益善。

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

3.创建工程项目,使用Python语言实现具体的操作运算,并完成程序调试和运行,代码托管到码云。

二. 实验过程及结果

1.代码设计目标:
能尽可能实现计算机的基本功能。

2.代码最终功能:
(1)数据类型支持复数和整数。
(2)运算支持加+,减-,乘 *,除 /,对数运算 log ,乘方运算**,取余 %,余弦 cos 正弦sin正切 tan运算,||取模等功能。
(3)计算结果按照python保留小数。
(4)如果用户输入错误,则会提醒用户重新输入。

3.重点代码解析
(1)首先通过选择语句控制复数还是整数,放在开头,减少重复:

(2)其次定义运算函数,注意先标注import math,同时注意不符合运算规则的运算(如分母为0等)

(3)通过if else分支语句分别输出每种计算:

(4)最后通过while函数循环,直到用户输入no为止:

4.完整代码

import math
def Csum(num1,num2):
    return num1+num2
def Csub(num1,num2):
    return num1-num2
def Cmulti(num1,num2):
    return num1*num2
def power_cal(num1, num2):
    return num1 ** num2
def sin_cal(num):
    return math.sin(num)
def cos_cal(num):
    return math.cos(num)
def tan_cal(num):
    if(math.cos(num)==0):
        print("正切分母不能为0")
        return 0
    return math.tan(num)
def Cdiv(num1,num2):
    if(num2==0):
        print("分母不能为0")
        return 0
    else:
        return num1/num2
def logab(a,b):
    return math.log(a,b)
def Crem(num1, num2):
    if num2 == 0:
        print("取余运算中除数不能为0")
        return 0
    return num1 % num2
def mo(num):
    return abs(num)
    #abs为复数取模公式
print("""
      欢迎使用计算机,本计算机功能众多;
      可支持整数的 加+,减-,乘 *,除 /,对数运算 log ,乘方运算**,取余 %,余弦 cos 正弦sin正切 tan运算;
      也可支持复数的+,减-,乘*,除/ ,乘方**, ||(模运算)运算。
      创建者:GC
      """)
flag=True
while flag:
    if input("请选择复数(1)还是整数(2)\n")=="2":
        num1=int(input("请输入一个数"))
        num2=int(input("请输入另一个数"))
        choice = input("请选择 加+,减-,乘 *,除 /,对数运算 log ,乘方运算**,取余 %,余弦 cos 正弦sin正切 tan运算")
    else :
        num1 = complex(input("请输入一个数"))
        num2 = complex(input("请输入另一个数"))
        choice=input("请选择加+,减-,乘*,除/ ,乘方**, ||(模运算)运算")
    if choice=="+":
        print("num1",choice,"num2=",Csum(num1,num2))
    elif choice == "-":
        print("num1", choice, "num2=", Csub(num1, num2))
    elif choice == "*":
        print("num1", choice, "num2=", Cmulti(num1, num2))
    elif choice=="/":
        print("num1",choice,"num2=",Cdiv(num1,num2))
    elif choice == "log":
        print("log以", num1,"为底",num2,"的对数为", logab(num2, num1))
    elif choice == "**":
        print("num1", choice, "num2 = ", power_cal(num1, num2))
    elif choice == "%":
        print("num1", choice, "num2 = ", Crem(num1, num2))
    elif choice=="sin":
        print(choice,"num1=",sin_cal(num1),"\n",choice,"num2=",sin_cal(num2))
    elif choice == "cos":
        print(choice, "num1=", cos_cal(num1), "\n", choice, "num2=", cos_cal(num2 ))
    elif choice == "tan":
        print(choice, "num1=", tan_cal(num1), "\n", choice, "num2=", tan_cal(num2))
    elif choice=="||":
        print("num1的模为",mo(num1),"num2的模为",mo(num2))
    conti=input("如果还要继续,请输入y或Y,否则输入n")
    if conti=="Y" or conti=="y":
        flag=True
    else:
        flag=False

5.代码调试:
(1)发现问题tan函数输入显示错误

(2)在tan函数处设置断点

(3)输入数值后点单步执行,发现系统在进入tan函数后报错,
说明tan函数不对。

(4)经检查发现误把math.cos(num)写成math.num改正过来。

(5)重新检验,发现结果正确:

6.代码运行:


7.上传至码云:
(1)写完代码后点击修正提交并推送:

(2)推送成功,在码云仓库中查看:

(3)码云代码链接:https://gitee.com/gu-chuanggo/PythonHomework/commit/21c46a3784a9ce82740750086e784011312a3b97

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

  • 问题1:不会复数求模公式
  • 问题1解决方案:查询deepseek,得知abs是求模的原生函数,所以前面也不能加math.
  • 问题2:复数和整数的选择重复
  • 问题2解决方案:老师讲解,得知开头分流选择运算即可。
  • 问题3:不知道复数的运算法则
  • 问题3解决方案:询问ai,或取乘除模等运算。

其他(感悟、思考等)

通过python代码写计算机,要注意复杂数据的处理以及运算间的逻辑规律。
合理使用AI,可以事半功倍。

参考资料

https://chat.deepseek.com/

posted @ 2025-04-07 21:27  20241321  阅读(20)  评论(0)    收藏  举报