编写一个不同年级自主学习的四则运算练习的程序,要求完成如下功能: (1) 用随机函数生成10个随机的四则运算,限制在两位数以内,超过的则用异常提醒 (2) 对于减法和除法要判断结果不能出现负数和除数不能为零,同时处理异常。 (3) 用户输入每一个的运算结果,然后并判断对错,对则加一分,最终计算出最终得分。 (4) 菜单能够循环让用户选择是否继续,直到选择结束而关闭程序。 (5) 判断对错需要一个单独的类,计分需要一个单独的类 (6) 一年级的学生,只有加减;三年级学生有加减乘除。构建父类和子类关系 (7) 增加登陆模块(至少需要2个用户,可以不实现注册功能),和记录具体某位用户的四则运算历史得分(需要有序号,第几次,得分时间),需要进行持久化存储(IO文件存储,或者数据库存储)
时间: 2024-03-01 20:52:00 浏览: 195
由于该题目是一个比较完整的程序,需要较为详细的代码实现,这里提供一个大体的程序框架和思路,具体实现需要根据实际需要进行修改和完善。
思路:
1. 定义一个运算类,包含生成随机运算、判断运算结果是否正确等方法。
2. 定义一个计分类,包含计算总分、记录用户得分历史等方法。
3. 定义一个用户类,包含用户登陆、注册等方法。
4. 定义一个主程序类,包含菜单、循环、持久化存储等方法。
代码实现:
```
# 运算类
class Operation:
def __init__(self):
self.operator = ['+', '-', '*', '/']
# 随机生成运算符
def generate_operator(self):
return random.choice(self.operator)
# 随机生成操作数
def generate_operand(self):
return random.randint(1, 100)
# 生成随机运算
def generate_expression(self):
operator = self.generate_operator()
operand1 = self.generate_operand()
operand2 = self.generate_operand()
if operator == '/' and (operand2 == 0 or operand1 % operand2 != 0):
return self.generate_expression()
if operator == '-':
if operand1 < operand2:
operand1, operand2 = operand2, operand1
return "%d %s %d" % (operand1, operator, operand2)
if operator == '+':
return "%d %s %d" % (operand1, operator, operand2)
if operator == '*':
return "%d %s %d" % (operand1, operator, operand2)
# 判断结果是否正确
def is_correct(self, expression, answer):
result = eval(expression)
if result == answer:
return True
else:
return False
# 计分类
class Score:
def __init__(self):
self.score = 0
self.history = []
# 计算总分
def calculate_score(self):
return self.score
# 记录用户得分历史
def record_history(self, expression, answer, is_correct, timestamp):
self.history.append((expression, answer, is_correct, timestamp))
# 用户类
class User:
def __init__(self, username, password):
self.username = username
self.password = password
self.score = Score()
# 登陆
def login(self, username, password):
if self.username == username and self.password == password:
return True
else:
return False
# 主程序类
class Main:
def __init__(self):
self.users = []
self.current_user = None
# 注册用户
def register_user(self, username, password):
user = User(username, password)
self.users.append(user)
# 登陆用户
def login_user(self, username, password):
for user in self.users:
if user.login(username, password):
self.current_user = user
return True
return False
# 生成随机运算
def generate_expressions(self, n):
operations = Operation()
expressions = []
for i in range(n):
expression = operations.generate_expression()
expressions.append(expression)
return expressions
# 计算总分
def calculate_score(self, answers, expressions):
score = self.current_user.score
for i in range(len(answers)):
is_correct = operations.is_correct(expressions[i], answers[i])
if is_correct:
score.score += 1
score.record_history(expressions[i], answers[i], is_correct, time.time())
# 菜单
def menu(self):
while True:
print("1. 注册")
print("2. 登陆")
print("3. 开始测试")
print("4. 查看历史得分")
print("5. 退出")
choice = input("请选择操作:")
if choice == '1':
username = input("请输入用户名:")
password = input("请输入密码:")
self.register_user(username, password)
elif choice == '2':
username = input("请输入用户名:")
password = input("请输入密码:")
if self.login_user(username, password):
print("登陆成功!")
else:
print("登陆失败!")
elif choice == '3':
if self.current_user is None:
print("请先登陆!")
else:
level = int(input("请选择难度级别(1为一年级,2为二年级,3为三年级):"))
if level == 1:
n = 10
elif level == 2:
n = 10
elif level == 3:
n = 20
expressions = self.generate_expressions(n)
answers = []
for i in range(n):
answer = int(input("请输入第%d个运算结果:" % (i + 1)))
answers.append(answer)
self.calculate_score(answers, expressions)
elif choice == '4':
if self.current_user is None:
print("请先登陆!")
else:
for i, history in enumerate(self.current_user.score.history):
print("%d. %s = %d,答案:%s,是否正确:%s,得分时间:%s" % (
i + 1, history[0], history[1], "正确" if history[2] else "错误", history[3]))
elif choice == '5':
break
else:
print("输入有误,请重新输入!")
```
以上代码仅为大体实现框架和思路,具体实现需要根据实际需要进行修改和完善,例如持久化存储可以使用文件或数据库进行实现。
阅读全文