学号 2024-2025-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 2411
姓名: 王方俊
学号:20241110
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课
一、实验内容
(一)设计并完成一个计算器,支持整数和复数,可以完成加、减、乘、除、对数和幂等运算,并设计简单的封面。
(二)设计一个出计算题程序,每次出10题,支持加减乘除四则运算,并统计正确率。
二、实验过程及结果
(一)设计一个计算器
1.计算器需要包含加减乘除四则运算,可定义函数进行计算。并设计属于自己的计算器封面,设计控制计算器是否继续。
代码如下
import mathdef Csum(num1, num2):return num1 + num2def Cdel(num1, num2):return num1 - num2def Cmul(num1, num2):return num1 * num2def Chu(num1, num2):if num2 == 0:print("除数不能为0")return Nonereturn num1 / num2cover = """
====================================================================================================================================###########################欢迎使用多功能计算器技术原创,切勿盗用 支持四则运算(整数/小数)请放心食用高效 准确作者:20241110 王方俊###########################
====================================================================================================================================
"""
print(cover)flag = True
while flag:try:num1 = float(input("请输入第一个数:"))num2 = float(input("请输入第二个数:"))operator = input("请输入运算符(+-*/):")if operator == "+":print(num1, operator, num2, "=", Csum(num1, num2))elif operator == "-":print(num1, operator, num2, "=", Cdel(num1, num2))elif operator == "*":print(num1, operator, num2, "=", Cmul(num1, num2))elif operator == "/":result = Chu(num1, num2)if result is not None:print(num1, operator, num2, "=", result)else:print("无效的运算符")if input("是否继续?(Y/N):").upper() == "N":flag = Falseexcept ValueError:print("输入无效,请输入数字")except Exception as e:print(f"发生错误: {e}")
运行结果如下
2.将计算器功能从整数拓展到复数,程序先判断是整数还是复数。注意复数是a+bj而不是a+bi(这点与数学区分开来)。
代码如下
import mathdef Csum(num1, num2):return num1 + num2def Cdel(num1, num2):return num1 - num2def Cmul(num1, num2):return num1 * num2def Chu(num1, num2):if num2 == 0:print("除数不为0")return Nonereturn num1 / num2cover = """
===============================================================================================================================================================================================###########################欢迎使用多功能计算器技术原创,切勿盗用 支持四则、幂、对数运算(整数/复数)请放心食用高效 准确作者:20241110 王方俊###########################
===============================================================================================================================================================================================
"""
print(cover)flag = True
while flag:choice_type = input("请问:需要复数(1)还是整数(2)运算:")if choice_type == "1":try:num1 = complex(input("请输入一个数(支持如 3+4j 格式):"))num2 = complex(input("请输入另一个数(支持如 3+4j 格式):"))except ValueError:print("输入的复数格式有误,请重新输入,例如 3+4j。")continueelif choice_type == "2":try:num1 = int(input("请输入一个数:"))num2 = int(input("请输入另一个数:"))except ValueError:print("输入的不是有效的整数,请重新输入。")continueelse:print("输入无效,请输入 1 或 2。")continueoperator = input("请输入运算符(+-*/):")if operator == "+":print(num1, operator, num2, "=", Csum(num1, num2))elif operator == "-":print(num1, operator, num2, "=", Cdel(num1, num2))elif operator == "*":print(num1, operator, num2, "=", Cmul(num1, num2))elif operator == "/":result = Chu(num1, num2)if result is not None:print(num1, operator, num2, "=", result)if input("是否继续?Y/N:").upper() == "N":flag = False
运行结果如下
3.进一步拓展计算器的功能,如增加对数函数和幂函数。注意对数函数需要满足真数大于0且底数大于0并且不为1。
代码如下
import mathdef Csum(num1, num2):return num1 + num2def Cdel(num1, num2):return num1 - num2def Cmul(num1, num2):return num1 * num2def Chu(num1, num2):if num2 == 0:print("除数不为0")return Nonereturn num1 / num2def Cpow(num1, num2):return num1 ** num2def Clog(num1, num2):try:if isinstance(num1, complex) or isinstance(num2, complex):import cmathreturn cmath.log(num1, num2)else:return math.log(num1, num2)except ValueError:print("对数运算输入值不合法,请确保底数大于0且不等于1,真数大于0。")return Noneexcept ZeroDivisionError:print("对数运算中底数不能为1。")return Nonecover = """
===============================================================================================================================================================================================###########################欢迎使用多功能计算器技术原创,切勿盗用 支持四则、幂、对数运算(整数/复数)请放心食用高效 准确作者:20241110 王方俊###########################
===============================================================================================================================================================================================
"""
print(cover)flag = True
while flag:choice_type = input("请问:需要复数(1)还是整数(2)运算:")if choice_type == "1":try:num1 = complex(input("请输入一个数(支持如 3+4j 格式):"))num2 = complex(input("请输入另一个数(支持如 3+4j 格式):"))except ValueError:print("输入的复数格式有误,请重新输入,例如 3+4j。")continueelif choice_type == "2":try:num1 = int(input("请输入一个数:"))num2 = int(input("请输入另一个数:"))except ValueError:print("输入的不是有效的整数,请重新输入。")continueelse:print("输入无效,请输入 1 或 2。")continueoperator = input("请输入运算符(+-*/^log):")if operator == "+":print(num1, operator, num2, "=", Csum(num1, num2))elif operator == "-":print(num1, operator, num2, "=", Cdel(num1, num2))elif operator == "*":print(num1, operator, num2, "=", Cmul(num1, num2))elif operator == "/":result = Chu(num1, num2)if result is not None:print(num1, operator, num2, "=", result)elif operator == "^":print(num1, operator, num2, "=", Cpow(num1, num2))elif operator == "log":result = Clog(num1, num2)if result is not None:print("log以", num2, "为底", num1, "的对数是:", result)if input("是否继续?Y/N:").upper() == "N":flag = False
运行结果如下
(二)设计一个出计算题程序
编写小学生刷题程序,一次出十道题,最后统计正确率。
import randomdef generate_question():operators = ['+', '-', '*', '/']op = random.choice(operators)if op == '+':a = random.randint(1, 100)b = random.randint(1, 100)answer = a + belif op == '-':a = random.randint(1, 100)b = random.randint(1, 100)a, b = max(a, b), min(a, b)answer = a - belif op == '*':a = random.randint(1, 20)b = random.randint(1, 10)answer = a * belse:b = random.randint(1, 10)a = b * random.randint(1, 10)answer = a // breturn str(a) + " " + op + " " + str(b) + " = ", answerdef math_quiz():print("=" * 50)print("欢迎来到数学小测验!")print("你将回答10道四则运算题")print("=" * 50)correct = 0for i in range(1, 11):question, answer = generate_question()while True:try:user_answer = int(input("第" + str(i) + "题: " + question))if user_answer == answer:print("回答正确!\n")correct += 1else:print("回答错误,正确答案是: " + str(answer) + "\n")breakexcept ValueError:print("请输入一个整数!")score = correct * 10print("\n测验结束!")print("你的得分: " + str(score) + "分")print("正确率: " + str(correct) + "/10 (" + str(score) + "%)")if score == 100:print("太棒了!满分!")elif score >= 70:print("做得不错!")else:print("再加把劲!")if __name__ == "__main__":while True:math_quiz()again = input("\n是否再来一次?(y/n): ").lower()if again != 'y':print("再见!")break
运行结果
三、实验过程中遇到的问题和解决过程
问题1:复数无法表示
问题1解决方案:不能用a+bi,要用a+bj。同时设置提示(如3+4j)让用户理解
问题2:不知道如何让用户端终止程序
问题2解决方案:通过老师讲解用(Y/N)提示,当且仅当用户输入N,程序结束
四、其他(感悟、思考等)
1.Python中很多奇妙的事情,如复数的表示与数学类似但不尽相同。面对复杂的复数运算,程序自己可以解决。
2.灵活定义一些函数可以事半功倍。
参考资料
零基础学《Python》
python—函数详解