个人作业--四则运算

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

posted on 2018-03-31 21:04  WitW  阅读(255)  评论(0编辑  收藏  举报

导航