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实现的更多相关文章

  1. 四则运算生成命令行程序 (Python)

    Github项目地址:Github Pages 结对项目成员:张鹏 3118004985 郑靓 3118004988 一.项目需求分析 二.功能实现 三.代码实现or功能说明 ★ GUI功能扩展说明 ...

  2. SQL Server ->> 校检函数CHECKSUM、CHECKSUM_AGG、BINARY_CHECKSUM和HASHBYTES

    今天特地查了一下SQL Server下的校检函数有哪些.原本我只是在工作中用过一个CHECKSUM,今天特地学习了一下才发现原来还有其他的校检函数. 这里找到了别人对于SQL SERVER下这几个校检 ...

  3. Spring MVC全局异常处理与拦截器校检

    在使用Spring MVC进行开发时,总是要对系统异常和用户的异常行为进行处理,以提供给用户友好的提示,也可以提高系统的安全性. 拦截系统响应错误 首先是拦截系统响应错误,这个可以在web.xml中配 ...

  4. TableView 校检表

    这俩天学习了tableView 校检表 主要就是通过一个方法来跟踪当前选中的行.下面将声明一个NSIndexPath 的属性来跟踪最后选中的行.这篇文章希望能给那些初学者带来学习的乐趣.不说了直接上代 ...

  5. 软件工程启程篇章:C#和四则运算生成与运算

    0x01 :序言 I leave uncultivated today, was precisely yestoday perishes tomorrow which the person of th ...

  6. 【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517

    [整体概况] 1.描述最终的代码的实现思路以及关键代码. 2.结对作业两个人配合的过程和两个人分工. 3.API接口文档和两个组的对接. 4.效能分析,优化分析和心得体会. [代码实现] 一. 实现功 ...

  7. python生成pdf报告、python实现html转换为pdf报告

    1.先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f 安装python包:pip Install pdfkit 系统安装wkhtmltopdf:参考 https://githu ...

  8. faker生成器生成虚拟数据的Python模块

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:行哥 今天给大家介绍一个Faker模块,一款基于Python的测试数 ...

  9. Python 脚本生成测试数据,Python生成随机数据,Python生成大量数据保存到文件夹中

    代码如下: import random import datetime import time dataCount = 10*100*100 #10M. codeRange = range(ord(' ...

随机推荐

  1. java 中JFinal getModel方法和数据库使用出现问题解决办法

    JFinal getModel方法(从页面表单中获取Model对象)+数据库存储问题 一.getmodel方法 1.在JConfig配置类中的数据库映射(存储到数据库时需要此配置) public vo ...

  2. [笔记]Go语言的字符串拼装方式性能对比

    Go语言中字符串的拼装方法很多,那么问题来了,到底哪家性能好? 下面代码,分别比较了 fmt.Sprintf,string +,strings.Join,bytes.Buffer,方法是循环若干次比较 ...

  3. mfc学习---文档视图架构

    MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用.单文档应用(SDI)和多文档应用(MDI).   一般情况下,采用文档/视结构的应用程序至少应由以下对象组成:       1. ...

  4. Linux 搭建 SVN

    一.yum 安装 subversion yum -y install subversion 二.创建svn版本库所在路径(建议放在opt.usr.home下) mkdir -p /usr/local/ ...

  5. level-13

    如何调试IE浏览器 1.打开IE浏览器,F12打开开发者模式.(针对IE7及以上) 2.针对IE6浏览器.使用虚拟机或者用ietester 什么是CSS hack?在 CSS 和 HTML里如何写 h ...

  6. windows vs 编译tesseract-ocr

    第一把所有相关的代码都下载,github最方便 https://github.com/tesseract-ocr/tesseract 要点1.cppan c++的中文管理包,很方便,需要翻-墙,安装包 ...

  7. 20162326 齐力锋 2016-2017-2 《程序设计与数据结构》 MySort.java 实验博客

    实验代码学习编程中的问题及解决方法 代码运行成功截图 首次代码运行出现的问题截图 问题1:无法从静态上下文中引用非静态方法 问题1解决方法及思考: split方法是非静态方法,需要借助对象来调用.我查 ...

  8. [BZOJ2017][Usaco2009 Nov]硬币游戏

    Description 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起 ...

  9. 用maven创建web工程

    1.打开eclipse,选择File->New->Other菜单,弹出下面的对话框,在Wizards中输入maven,会过滤出和maven相关的菜单,选中Maven Project菜单,然 ...

  10. CA认证_demo

    CA认证,即电子认证服务 [1]  ,是指为电子签名相关各方提供真实性.可靠性验证的活动. 证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构.是负责发放和管理数字 ...