20204323 2021-2022-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级:2043
姓名:太晓梅
学号:20204323
实验教师:王志强
实验日期:2022年3月31日
必修/选修: 公选课
1.实验内容
1.设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
2.考核基本语法、判定语句、循环语句、逻辑运算等知识点
3.实验要求:创建工程项目,使用Python语言实现具体的操作运算,并完成程序调试和运行,代码托管到码云。
2. 实验过程及结果
要求分析及代码思路
实验要求实现设计计算器完成基本的运算,第一时间想到的就是编写输入运算符和运算数,利用if语句进行条件判断,通过输入的运算符号进行判断对输入的数进行相应的运算。申请变量result储存运算结果,并输出,这样就完成了一个简单的计算器。
我们在此基础上对功能进行完善,课上在老师的帮助下完成了复数计算器,python支持复数类型的变量,可以直接进行复数的运算。按照上一步的普通计算器将代码进行完善,将输入类型转换为复数类型,增加变量choice可提供给用户选择,用户可选择进行普通运算或者复数运算。但发现两种计算器的代码重合度很高,为了进一步简化代码,决定将相同的地方合并。由于两种计算器后续的计算过程中逻辑一致,可以采用相似的代码,只是由于两种计算器的参数类型不同,于是就将复数计算器和普通计算器的输入采用相同的变量名,利用if条件语句给变量定义不同的类型。大大缩减了代码的篇幅。
到这里,代码已经算是初具雏形了,但还有两点不太完善。第一点是关于计算器的容错率,计算机目前的容错率还比较低,主要体现在一用户输入时若输入非法字符,无法继续。利用if语句中的else语句,涵盖其他所有错误输入的情况,提醒用户输入错误并重新进入循环进行输入。二是在进行运算时,无法提醒用户逻辑错误,典型代表是在进行除法运算时,除数不能为零。于是在进行除数运算时增加一组if语句,判断除数是否为0,若除数为0,则提醒用户并重新进入循环进行输入。
除此之外,计算器面对用户进行选择的界面也不方便。于是我在操作符输入中增加了选项0可提供选择让用户退出,用户输入0后根据if语句判断进入循环的break。还增加了操作符1可以让用户返回上级操作,于是增加了变量Flag用于控制循环,也让循环变成了两层,用户输入1后终止小循环break,返回大循环中的上级操作。在计算机选择界面中也增添了选项0可提供选择让用户退出,用户输入0后进入大循环的break退出使用。更改小循环中的终止操作,if op == 0时,先令Flag=False,然后再break终止小循环,同时大循环也终止。
运行结果
1.普通计算器
2.复数计算器
3.容错率
4.用户选择
实验代码
print("Besti_TXM低配计算器!你值得拥有~")
Flag = True
flag = True
while Flag == True:
choice = int(input("请输入您想要选择的计算器类型:1为普通计算器,2为复数计算器(输入0退出):\n"))
if choice==1 or choice ==2:
while flag == True:
result = 0
op = input("请输入需要做的操作(+、—、、/、%输入1返回上一级操作,输入0退出):")
if op == "1":
break
elif op == "0":
Flag = False
break
if choice == 1:
a = int(input("请输入操作数1:"))
b = int(input("请输入操作数2:"))
elif choice == 2:
a = complex(input("请输入第一个复数(虚部用j表示):"))
b = complex(input("请输入第二个复数(虚部用j表示):"))
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "":
result = a * b
elif op == "/":
if b == 0:
print("输入有误,除数不能为0哦~请重新输入")
continue
else:
result = a / b
elif op == "%":
result = a % b
else:
print("输入有误,请重新输入")
continue
print("a" + op + "b= ", result, "\n")
elif choice == 0:
break
else:
print("输入有误,请重新输入")
continue
3. 实验过程中遇到的问题和解决过程
- 问题1:实现用户返回上一级的操作
- 问题1解决方案:思考第一步中计算器的代码结构,想到可以设置两层循环来实现此功能
- 问题2:编译完代码后运行,发现无论怎样输入,最后输出的结果都是0
- 问题2解决方案:debug单步运行发现result运行到0之后就输出了没有if条件判断操作符再进行单步运行。看代码发现是if语句的使用问题,由于下面的操作符判断中采用的是elif语句,所以运行到choice的判断语句后便不会继续运行操作符判断,输出的就是result的初始结果0。将操作符判断elif op"+"改为if op"+"后恢复正常。
其他(感悟、思考等)
在本次实验中再一次感受到了python的方便,特别是在编写复数计算器的时候,python可以直接定义复数类型的变量进行运算,相比起其他的基层语言带给了使用者更多的便捷。本次实验也让我巩固了if语句和循环的用法,感受到了只要认真思考、多实践,再基础再简单的东西也可以学以致用。但在本次实验中也存在着许多不足,例如编写程序时不熟悉,导致编写的缓慢,由于粗心还经常出现语法错误。在本次实验中也感受到了debug是一项必须掌握的技能,他能帮助我们发现不易查找的逻辑错误,特别是在代码很多很长的时候,但我现在运用的还不是特别熟练。希望通过今后的多练习、多学习可以改掉这些坏毛病,更熟练的掌握和运用python。