四则运算生成与校检 Python实现
Posted nxnx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四则运算生成与校检 Python实现相关的知识,希望对你有一定的参考价值。
https://github.com/little-petrol/Arithmetic.git
合作者: 郭旭 和 卢明凯
设计实现过程
代码的组织主要分为两个部分:
-
算法与结构体的实现。
-
大体结构,各算法的连接与调用。
Generate()
类是程序的主题架构类,先通过get_info()
函数获取传入参数,再通过NewExpressions()
函数将generate()
函数生的成算数表达式按算术式和答案分别写入到文件Exercises.txt
和Answer.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实现的主要内容,如果未能解决你的问题,请参考以下文章