康哲 20190919-4 单元测试,结对

此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7629

git链接:https://e.coding.net/kangzhe/size.git

结对伙伴:付宇泽

单元测试代码:

测试代码测试了f4的几个基本功能,包括生成随机的表达式,中缀表达式转成后缀表达式,后缀表达式的计算

import unittest
from f4 import *


class F4Test(unittest.TestCase):
    def test_f4(self):
        pass

    # 测试顺序按函数名字字典顺序进行
    def test01_create_formula(self):
        print("create_formula函数单元测试开始:")
        self.assertIsNotNone(create_formula())
        print("OK")
        print("create_formula函数单元测试结束。\n")

    def test02_reverse_polish(self):
        eq = []
        print("reverse_polish函数单元测试开始:")
        equation = input("输入一个四则运算(括号请使用英文版的括号):")
        _eq_ans = input("输入正确的后缀表达式:")
        # 输入的表达式是str类型,该函数处理的是含有整型和字符型的list类型
        list(equation)
        for temp in equation:
            if '0' <= temp <= '9':
                eq.append(int(temp))
            else:
                eq.append(temp)
        re_equation = reverse_polish(eq)
        str_equation = "".join('%s' % id for id in re_equation)
        self.assertEqual(_eq_ans, str_equation)
        print("OK")
        print("reverse_polish函数单元测试结束。\n")

    def test03_calculate(self):
        eq = []
        print("calculate函数单元测试开始:")
        equation = input("输入一个可计算的后缀表达式:")
        _eq_ans = input("输入该表达式的正确结果:")
        list(equation)
        for temp in equation:
            if '0' <= temp <= '9':
                eq.append(int(temp))
            else:
                eq.append(temp)
        result = calculate(eq)
        self.assertEqual(float(_eq_ans), result)
        print("OK")
        print("calculate函数单元测试结束。\n")


if __name__ == "__main__":
    unittest.main()

 测试截图如下:

康哲 20190919-4 单元测试,结对_第1张图片

 

 

 

 

 

 康哲 20190919-4 单元测试,结对_第2张图片

 

 

 

 生成表达式代码如下:

def create_formula():
    equation = []

    for i in range(3):
        equation.append(random.randint(0, 10))
        equation.append(operator[random.randint(0, 3)])
    equation.append(random.randint(0, 10))
    p = random.randint(1, 5)
    if p is 1:
        equation.insert(0, "(")
        equation.insert(4, ")")
    elif p is 2:
        equation.insert(0, "(")
        equation.insert(6, ")")
    elif p is 3:
        equation.insert(2, "(")
        equation.insert(6, ")")
    elif p is 4:
        equation.insert(2, "(")
        equation.append(")")
    elif p is 5:
        equation.insert(4, "(")
        equation.append(")")
    return equation

中缀转后缀代码如下:

# 中缀表达式转为后缀表达式
def reverse_polish(equation):
    result = []
    c = []
    slist = [i for i in equation]

    for item in slist:
        if item in range(0, 100):
            result.append(item)
        elif not c and item in operator_dic.keys():
            c.append(item)
            continue
        elif c and item in operator_dic.keys():
            for x in range(c.__len__()):
                z = c[-1]
                temp = operator_dic[z] if z in operator_dic else cal1[z]
                if temp >= operator_dic[item]:
                    result.append(c.pop())
                else:
                    c.append(item)
                    break
            if not c:
                c.append(item)
        elif item is ")":
            for x in range(c.__len__()):
                if c[-1] == "(":
                    c.pop()
                    break
                else:
                    result.append(c.pop())
        elif item is "(":
            c.append(item)
    for x in range(c.__len__()):
        result.append(c.pop())
    return result

计算后缀表达式代码如下:

# 计算后缀表达式
def calculate(re_equation):
    stack = Stack()
    sumEnd = 0

    if len(re_equation) is 0:
        return sumEnd
    for i in re_equation:
        if i in range(0, 100):
            stack.push(float(i))
        elif '+' is i:
            a = stack.pop()
            b = stack.pop()
            stack.push(b + a)
        elif '-' is i:
            a = stack.pop()
            b = stack.pop()
            stack.push(b - a)
        elif '*' is i:
            a = stack.pop()
            b = stack.pop()
            stack.push(b * a)
        elif '÷' is i:
            a = stack.pop()
            b = stack.pop()
            if a == 0:
                return False
            else:
                stack.push(b / a)
    return stack.pop()

 

你可能感兴趣的:(康哲 20190919-4 单元测试,结对)