1.分析与设计
a.题目要求:
写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
运算符为 +, −, ×, ÷
并且要求能处理用户的输入,并判断对错,打分统计正确率。
要求能处理用户输入的真分数, 如 1/2, 5/12 等
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
b.需求分析:
能够自动生成小学生加减乘除四则运算题目,包括整数和真分数的运算。其需求包括:(1)能够控制生成题目的个数。(2)判断对错并统计正确率
。
c.功能设计:
1.基本功能:实现基本的加减乘除四则运算。
2.扩展功能:能够处理真分数的四则运算。
3.高级功能:判断对错并统计正确率。
d.具体实现
1.采用Python语言
2.具体思路:随机生成中缀表达式--->中缀转后缀--->后缀转二叉树--->二叉树查重
3.客户端随机输入题目数和数的范围
4.将回答的答案进行比对
5.将信息保存在信息中
生成中缀表达式:
def generate():
num = random.randint(1,3)
formular = [str(random.randint(1, 100)),random.choice(operatorDicts),str(random.randint(1, 100))]
for i in range(num-1):
formular.append(random.choice(operatorDicts))
formular.append(str(random.randint(1,100)))
length = len(formular)
if num==1:
pass
else:
n = int(random.randrange(0,length-2,2))
formular.insert(n,'(')
v = random.randrange(0,3,2)
m = n+v+4
formular.insert(m,')')
return formular
中缀转后缀:
def exchange(formular):
postfix = []
stack = []
def opOrder(op1, op2):
order_dic = {'*': 4, '/': 4, '+': 3, '-': 3}
if op1 == '(' or op2 == '(':
return False
elif op2 == ')':
return True
else:
if order_dic[op1] < order_dic[op2]:
return False
else:
return True
for s in formular:
if s.isdigit():
postfix.append(s)
else:
while len(stack) != 0 and opOrder(stack[-1], s):
op = stack.pop()
postfix.append(op)
if len(stack) == 0 or s != ')':
stack.append(s)
else:
top_op = stack.pop()
if len(stack):
for i in range(len(stack)):
postfix.append(stack[i])
return postfix
结果展示:
代码链接:https://git.coding.net/WitW/Arithmetic.git