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