编写一个不同年级自主学习的四则运算练习的程序,要求完成如下功能: (1) 用随机函数生成10个随机的四则运算,限制在两位数以内,超过的则用异常提醒 (2) 对于减法和除法要判断结果不能出现负数和除数不能为零,同时处理异常。 (3) 用户输入每一个的运算结果,然后并判断对错,对则加一分,最终计算出最终得分。 (4) 菜单能够循环让用户选择是否继续,直到选择结束而关闭程序。 (5) 判断对错需要一个单独的类,计分需要一个单独的类 (6) 一年级的学生,只有加减;三年级学生有加减乘除。构建父类和子类关系,在四则运算part1的基础上,增加登陆模块(至少需要2个用户,可以不实现注册功能),和记录具体某位用户的四则运算历史得分(需要有序号,第几次,得分时间),需要进行持久化存储(IO文件存储,或者数据库存储)
时间: 2024-03-18 17:40:58 浏览: 154
好的,这是一个比较复杂的程序,需要较长的时间和代码来实现。下面是一个初步的思路和伪代码:
1. 定义一个Operator类,包含加减乘除四种运算方法。这个类可以作为父类,子类Year1和Year3分别继承该类,Year1只实现加减,Year3实现全部四则运算。
2. 定义一个Question类,包含两个变量和一个方法:num1, num2, and operator。这个类可以用来生成随机的四则运算题目。
3. 定义一个判断对错的类AnswerChecker,包含一个方法checkAnswer,用来判断用户输入的答案是否正确。
4. 定义一个计分的类ScoreCounter,包含一个方法addScore,用来记录用户得分。
5. 定义一个User类,包含用户名和密码两个属性,以及一个记录历史得分的方法。
6. 定义一个Menu类,用来显示主菜单和用户登录界面。
7. 在主程序中,使用Menu类显示主菜单,用户登录后选择年级,根据选择的年级实例化对应的Year1或Year3类,生成10个随机的四则运算题目,用户输入答案后,使用AnswerChecker类判断并记录得分,最后将得分保存到对应的User对象中。
8. 在程序结束时,将User对象的历史得分保存到IO文件或数据库中。
下面是一个伪代码实现:
```python
class Operator:
# 父类,包含加减乘除四种运算方法
def add(self, num1, num2):
pass
def sub(self, num1, num2):
pass
def mul(self, num1, num2):
pass
def div(self, num1, num2):
pass
class Year1(Operator):
# 子类,只实现加减
def add(self, num1, num2):
return num1 + num2
def sub(self, num1, num2):
return num1 - num2
class Year3(Operator):
# 子类,实现全部四则运算
def add(self, num1, num2):
return num1 + num2
def sub(self, num1, num2):
return num1 - num2
def mul(self, num1, num2):
return num1 * num2
def div(self, num1, num2):
if num2 == 0:
raise ValueError("除数不能为零")
elif num1 < num2:
raise ValueError("结果不能为负数")
else:
return num1 / num2
class Question:
# 四则运算题目类
def __init__(self, num1, num2, operator):
self.num1 = num1
self.num2 = num2
self.operator = operator
def get_question(self):
# 生成题目
if self.operator == "+":
return f"{self.num1} + {self.num2} = ?"
elif self.operator == "-":
return f"{self.num1} - {self.num2} = ?"
elif self.operator == "*":
return f"{self.num1} * {self.num2} = ?"
elif self.operator == "/":
return f"{self.num1} / {self.num2} = ?"
class AnswerChecker:
# 判断对错类
def check_answer(self, question, user_answer):
# 判断用户输入的答案是否正确
if question.operator == "+":
correct_answer = question.num1 + question.num2
elif question.operator == "-":
correct_answer = question.num1 - question.num2
elif question.operator == "*":
correct_answer = question.num1 * question.num2
elif question.operator == "/":
correct_answer = question.div(question.num1, question.num2)
return user_answer == correct_answer
class ScoreCounter:
# 计分类
def __init__(self):
self.score = 0
def add_score(self, is_correct):
# 根据答题情况记录得分
if is_correct:
self.score += 1
class User:
# 用户类
def __init__(self, username, password):
self.username = username
self.password = password
self.scores = []
def add_score(self, score, time):
# 记录得分
self.scores.append((len(self.scores)+1, score, time))
def get_scores(self):
# 返回历史得分
return self.scores
class Menu:
# 菜单类
def show_menu(self):
# 显示主菜单
print("1. 登录")
print("2. 退出")
def show_login(self):
# 显示用户登录界面
username = input("请输入用户名:")
password = input("请输入密码:")
return User(username, password)
def show_year_level(self):
# 显示年级选择界面
print("请选择年级:")
print("1. 一年级")
print("2. 三年级")
level = input("请选择:")
if level == "1":
return Year1()
elif level == "2":
return Year3()
else:
return None
def main():
menu = Menu()
user = None
while True:
menu.show_menu()
choice = input("请选择:")
if choice == "1":
user = menu.show_login()
year_level = menu.show_year_level()
if year_level is None:
print("年级选择错误")
continue
elif choice == "2":
break
else:
print("请选择正确的选项")
continue
# 生成随机题目
questions = []
for i in range(10):
try:
num1 = random.randint(1, 99)
num2 = random.randint(1, 99)
if num1 > 10 and num2 > 10:
operator = random.choice(["+", "-", "*", "/"])
else:
operator = random.choice(["+", "-"])
questions.append(Question(num1, num2, operator))
except ValueError as e:
print(e)
continue
# 回答问题并计分
score_counter = ScoreCounter()
for i, question in enumerate(questions):
print(f"第{i+1}题:{question.get_question()}")
try:
user_answer = int(input("请输入答案:"))
except ValueError:
print("请输入数字")
continue
try:
is_correct = AnswerChecker().check_answer(question, user_answer)
except ValueError as e:
print(e)
continue
score_counter.add_score(is_correct)
user.add_score(score_counter.score, time.strftime("%Y-%m-%d %H:%M:%S"))
print(f"您的得分是:{score_counter.score}")
# 保存历史得分
with open("scores.txt", "a") as f:
for score in user.get_scores():
f.write(f"{user.username},{score[0]},{score[1]},{score[2]}\n")
```
这是一个比较简单的实现,还有很多可以优化的地方,比如增加注册功能、使用数据库存储等。
阅读全文