四则运算作业
博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19 |
作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11376 |
作业目标 | 下附 |
学号 | 3190704111 |
二.题目要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
#-*- codeing = utf-8 -*- #@Time : 2020/10/27 21:50 #@Author : lyf #@File : vcc.py #@Software : PyCharm import random # 随机生成数 from fractions import Fraction # 分数的运算 list_questions=[] # 储存 题目 信息的列表 list_answers =[] # 储存 答案 信息的列表 #加法运算 def add(): num1 = random.randint(1, 100) #随机生成两个数 num2 = random.randint(1, 100) list_questions.append(str(num1) + '+' + str(num2) + '=') #题目,答案 追加到列表中 list_answers.append(num1 + num2) #减法运算 def cut(): num1 = random.randint(1, 100) num2 = random.randint(1, 100) if num1 < num2: num1, num2 = num2, num1 list_questions.append(str(num1) + '-' + str(num2) + '=') list_answers.append(num1 - num2) #乘法运算 def mul(): num1 = random.randint(1, 100) num2 = random.randint(1, 100) list_questions.append(str(num1) + 'x' + str(num2) + '=') list_answers.append(num1 * num2) #除法运算 def div(): num1 = random.randint(1, 100) num2 = random.randint(1, 100) num = Fraction(num1,num2) list_questions.append(str(num1) + '÷' + str(num2) + '=') list_answers.append(num) def integer_score(): #rand = operation[random.randint(0,3)] operation = ['+', '-', '*', '/'] # 四则运算的符号 number = random.randint(1,4) #随机产生的表达式长度 f = '' for i in range(number): a = random.randint(1,20) #随机产生的表达式中的数 rand = operation[random.randint(0, 3)] #随机选择一个四则运算中的符号 if rand == '/': b = random.randint(a, 20) #随机产生的真分数的分母 f += str(a) + rand + str(b) #数与符号相连 rand = operation[random.randint(0, 2)] #随机选择一个四则运算中的符号 f += rand else: f += str(a) + rand #print(a,rand,end='') b = random.randint(1, 20) f += str(b) #得到完整的表达式 n = eval(f) #得到表达式的结果 n = Fraction('{}'.format(n)).limit_denominator() #小数转化为分数 if n > 0: print('题目:') print(f,'=') print('请输出答案:') x = Fraction('{}'.format(eval(input()))).limit_denominator() if n == x: #输入的数与表达式比较 print(True) else: print(False) print('正确的答案为:',n) else: integer_score() #随机运算 def rand_nums(): rule = random.choice(['+','-','x','÷']) #随机生成 运算符 if rule == '+': #生成 加法 题目,答案 add() elif rule == '-': #生成 减法 题目,答案 cut() elif rule == 'x': #生成 乘法 题目,答案 mul() else: #生成 除法 题目,答案 div() # 判断对错,并计算分数 def judge(): count = 0 #分数值 for i in range(len(list_questions)): print("第{}题".format(i + 1)) print("题目:",list_questions[i]) y_answer = eval(input("请输入你的答案:")) #输入答案 if y_answer == float(list_answers[i]): #判断对错 print("回答正确!") print("----------------") count += 1 else: print("很遗憾,回答错误!正确答案是:{}".format(list_answers[i])) print("----------------") return count #真分数运算 def frac(): fz1 = random.randint(1,10) #分子 1 fm1 = random.randint(1,10) #分母 1 if fz1 > fm1: fz1,fm1 = fm1,fz1 # 保证为真分数 num1 = Fraction(fz1,fm1) # 调用 Fraction 生成分数 fz2 = random.randint(1,10) #分子 2 fm2 = random.randint(1,10) #分母 2 if fz2 > fm2: fz2,fm2 = fm2,fz2 num2 = Fraction(fz2,fm2) if num1 < num2: num1,num2 = num2,num1 # 保证结果为正数,除法除外 rule = random.choice(['+','-','x','÷']) if rule == '+': list_questions.append(str(num1) + ' + ' + str(num2) + '=') list_answers.append(num1 + num2) elif rule == '-': list_questions.append(str(num1) + ' - ' + str(num2) + '=') list_answers.append(num1 - num2) elif rule == 'x': list_questions.append("(" + str(num1) + ")" + 'x' + "(" + str(num2) + ")" + '=') list_answers.append(num1 * num2) else: list_questions.append("(" + str(num1) + ")" + '÷' + "(" + str(num2) + ")" + '=') list_answers.append(num1 / num2) # 打印界面提示信息 def display(): print("------------------------欢迎来到随机生成四则运算小程序------------------------") print() print("********* 1. 加法运算(+) ********* 2. 减法运算(-)") print("********* 3. 乘法运算(x) ********* 4. 除法运算(÷)") print("********* 5. 随机生成(随机生成四种运算) ********* 6. 真分数运算(随机生成四种运算)") print("********* 7. 随机生成复合运算") print() print("提示:对于除不尽的数可以用分数表示:如 2÷3 = 2/3") print("---------------------------------------------------------------------------") #主函数 def main(): display() #调用显示函数 n = int(input("请输入题目的数量:")) print("----------------") choose_rule = int(input("请选择要进行的运算(1-7):")) for i in range(n): if choose_rule == 1: add() elif choose_rule == 2: cut() elif choose_rule == 3: mul() elif choose_rule == 4: div() elif choose_rule == 5: rand_nums() elif choose_rule == 6: frac() elif choose_rule == 7: integer_score() else: print("输入有误,请选择(1-7)!") break count = judge() #调用judge函数,判断对错,并计分 rate = count/n print("总共{}分,共答对{}分,正确率:{:.2f}%".format(n,count,rate*100)) main() #主函数调用