码迷,mamicode.com
首页 > 编程语言 > 详细

四则运算生成与校检 Python实现

时间:2018-09-30 21:21:34      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:参数   repo   改进   连接   expand   经历   题目   dom   node   

GitHub地址

https://github.com/little-petrol/Arithmetic.git

合作者: 郭旭 和 卢明凯

设计实现过程

代码的组织主要分为两个部分:

  1. 算法与结构体的实现。

  2. 大体结构,各算法的连接与调用。

Generate()类是程序的主题架构类,先通过get_info()函数获取传入参数,再通过NewExpressions()函数将generate()函数生的成算数表达式按算术式和答案分别写入到文件Exercises.txtAnswer.txt中。

在生成函数generate() 中,通过调用built_Tree() 函数生成以class Node() 为节点的二叉树,再通过class BiTree() 对二叉树进行括号和运算顺序规整、计算。再通过fitBiTre() 对二叉树进行纠错。在生成的过程中,采用了check_repeat() 来对生成的表达式进行查重。

代码说明

检查纠错函数

用于检测二叉树中的左右子树是否会出现不符合规格的情况,并进行纠正:

def fitBiTree(root):
    if root.symbol == "/":
        return root.number
    elif root.symbol == "+":
        return fitBiTree(root.ltree) + fitBiTree(root.rtree)
    elif root.symbol == "*":
        return fitBiTree(root.ltree) * fitBiTree(root.rtree)
    elif root.symbol == "-":
        a = fitBiTree(root.ltree) - fitBiTree(root.rtree)
        if a < 0:
            b = root.ltree
            root.ltree = root.rtree
            root.rtree = b
            a = fitBiTree(root.ltree) - fitBiTree(root.rtree)
        return a
    elif root.symbol == "&":
        if fitBiTree(root.ltree) >= fitBiTree(root.rtree):
            b = root.ltree
            root.ltree = root.rtree
            root.rtree = b
?
        a = fitBiTree(root.ltree) / fitBiTree(root.rtree)
        return a

 

输出函数

输出函数,用于将二叉树中的内容输出成公式和结果:

def show(self, root):
    if root.symbol == "/":
        return ShowFraction(root.number)
    elif root.symbol == "+" or root.symbol == "-":
        if root.rtree.symbol == "+" or root.rtree.symbol == "-":
            return self.show(root.ltree) + " " + root.symbol + " ( " + self.show(root.rtree) + " )"
        return self.show(root.ltree) + " " + root.symbol + " " + self.show(root.rtree)
    else:
        if root.ltree.symbol == "+" or root.ltree.symbol == "-":
            i = "( " + self.show(root.ltree) + " )"
        else:
            i = self.show(root.ltree)
        i += " " + root.symbol + " "
        if root.rtree.symbol != "/":
            i += "( " + self.show(root.rtree) + " )"
        else:
            i += self.show(root.rtree)
        return i

 

二叉树生成函数

用于生成随机的二叉树:

def generate(self):
    type_list = [F, I]  # Fraction or Int
    sym_num = random.randint(1, 3)  # 符号数
    type = random.sample(type_list, 1)[0]   # 数类型
    root = self.built_Tree(sym_num, type)
    tree = BiTree(root)
    fitBiTree(root)
    tree_string = str(tree.show(tree.root))
    is_repeat = self.check_repeat(tree_string)
    if  is_repeat == True:
        print(tree.show(tree.root) + " = " + ShowFraction(tree.Count(tree.root)))
        return root
    else:
        while is_repeat == False:
            #print(‘error‘)
            root = self.built_Tree(sym_num, type)
            tree = BiTree(root)
            fitBiTree(root)
            tree_string = str(tree.show(tree.root))
            is_repeat = self.check_repeat(tree_string)
        print(tree.show(tree.root) + " = " + ShowFraction(tree.Count(tree.root)))
        #print(‘mark‘)
        return root

 

测试运行

题目生成:

技术分享图片

技术分享图片

 

将题目与答案分别存到不同的文件中

技术分享图片

技术分享图片

 

题目与答案的校对

技术分享图片

 

 技术分享图片

 

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 2h 3h
· Estimate · 估计这个任务需要多少时间 2h 2h
Development 开发 80h 80h
· Analysis · 需求分析 (包括学习新技术) 10h 15h
· Design Spec · 生成设计文档 2h 2h
· Design Review · 设计复审 (和同事审核设计文档) 8h 3h
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 8h 4h
· Design · 具体设计 10h 4h
· Coding · 具体编码 20h 30h
· Code Review · 代码复审 2h 2h
· Test · 测试(自我测试,修改代码,提交修改) 12h 12h
Reporting 报告 4h 3h
· Test Report · 测试报告 3h 3h
· Size Measurement · 计算工作量 2h 1h
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 4h 3h
合计   169h 167h

项目小结

在项目开始的初期,是异常艰难的。结对编程的难点在于两人的进度和想法很难进行同步,导致编程的进程节奏难以把握。经常出现等待的情况。到后来加强了双方的交流以后,节奏有了明显的提升,配合也渐渐得熟悉了起来。

这次结对编程的经历让我懂得了编程不是埋头苦干就能成事的,特别是多人配合的时候,交流就显得十分的重要了。多交流想法和进度才能更好地推进进度。

四则运算生成与校检 Python实现

标签:参数   repo   改进   连接   expand   经历   题目   dom   node   

原文地址:https://www.cnblogs.com/nxnx/p/Arithmetic.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!