20241110 实验二《Python程序设计》实验报告
学号 2024-2025-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 2411
姓名: 王方俊
学号:20241110
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课
一、实验内容
(一)设计并完成一个计算器,支持整数和复数,可以完成加、减、乘、除、对数和幂等运算,并设计简单的封面。
(二)设计一个出计算题程序,每次出10题,支持加减乘除四则运算,并统计正确率。
二、实验过程及结果
(一)设计一个计算器
1.计算器需要包含加减乘除四则运算,可定义函数进行计算。并设计属于自己的计算器封面,设计控制计算器是否继续。
代码如下
import math
def Csum(num1, num2):
return num1 + num2
def Cdel(num1, num2):
return num1 - num2
def Cmul(num1, num2):
return num1 * num2
def Chu(num1, num2):
if num2 == 0:
print("除数不能为0")
return None
return num1 / num2
cover = """
====================================================================================================================================
###########################
欢迎使用多功能计算器
技术原创,切勿盗用
支持四则运算(整数/小数)
请放心食用
高效 准确
作者: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 = False
except ValueError:
print("输入无效,请输入数字")
except Exception as e:
print(f"发生错误: {e}")
运行结果如下

2.将计算器功能从整数拓展到复数,程序先判断是整数还是复数。注意复数是a+bj而不是a+bi(这点与数学区分开来)。
代码如下
import math
def Csum(num1, num2):
return num1 + num2
def Cdel(num1, num2):
return num1 - num2
def Cmul(num1, num2):
return num1 * num2
def Chu(num1, num2):
if num2 == 0:
print("除数不为0")
return None
return num1 / num2
cover = """
===============================================================================================================================================================================================
###########################
欢迎使用多功能计算器
技术原创,切勿盗用
支持四则、幂、对数运算(整数/复数)
请放心食用
高效 准确
作者: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。")
continue
elif choice_type == "2":
try:
num1 = int(input("请输入一个数:"))
num2 = int(input("请输入另一个数:"))
except ValueError:
print("输入的不是有效的整数,请重新输入。")
continue
else:
print("输入无效,请输入 1 或 2。")
continue
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)
if input("是否继续?Y/N:").upper() == "N":
flag = False
运行结果如下

3.进一步拓展计算器的功能,如增加对数函数和幂函数。注意对数函数需要满足真数大于0且底数大于0并且不为1。
代码如下
import math
def Csum(num1, num2):
return num1 + num2
def Cdel(num1, num2):
return num1 - num2
def Cmul(num1, num2):
return num1 * num2
def Chu(num1, num2):
if num2 == 0:
print("除数不为0")
return None
return num1 / num2
def Cpow(num1, num2):
return num1 ** num2
def Clog(num1, num2):
try:
if isinstance(num1, complex) or isinstance(num2, complex):
import cmath
return cmath.log(num1, num2)
else:
return math.log(num1, num2)
except ValueError:
print("对数运算输入值不合法,请确保底数大于0且不等于1,真数大于0。")
return None
except ZeroDivisionError:
print("对数运算中底数不能为1。")
return None
cover = """
===============================================================================================================================================================================================
###########################
欢迎使用多功能计算器
技术原创,切勿盗用
支持四则、幂、对数运算(整数/复数)
请放心食用
高效 准确
作者: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。")
continue
elif choice_type == "2":
try:
num1 = int(input("请输入一个数:"))
num2 = int(input("请输入另一个数:"))
except ValueError:
print("输入的不是有效的整数,请重新输入。")
continue
else:
print("输入无效,请输入 1 或 2。")
continue
operator = 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 random
def generate_question():
operators = ['+', '-', '*', '/']
op = random.choice(operators)
if op == '+':
a = random.randint(1, 100)
b = random.randint(1, 100)
answer = a + b
elif op == '-':
a = random.randint(1, 100)
b = random.randint(1, 100)
a, b = max(a, b), min(a, b)
answer = a - b
elif op == '*':
a = random.randint(1, 20)
b = random.randint(1, 10)
answer = a * b
else:
b = random.randint(1, 10)
a = b * random.randint(1, 10)
answer = a // b
return str(a) + " " + op + " " + str(b) + " = ", answer
def math_quiz():
print("=" * 50)
print("欢迎来到数学小测验!")
print("你将回答10道四则运算题")
print("=" * 50)
correct = 0
for 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 += 1
else:
print("回答错误,正确答案是: " + str(answer) + "\n")
break
except ValueError:
print("请输入一个整数!")
score = correct * 10
print("\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
运行结果


浙公网安备 33010602011771号