结对项目:四则运算
| 这个作业属于哪个课程 |https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
| --------------- | --------------- | --------------- |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11148 |
| 这个作业的目标 |实现一个自动生成小学四则运算题目的命令行程序 |
1.项目成员
姓名:廖冠乔 学号:3118005280
姓名:钟炜博 学号:3118005302
GitHub地址:https://github.com/zwb5/sizeyunsuan
2.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 20 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 20 |
| Development | 开发 | 565 | 625 |
| · Analysis | · 需求分析 (包括学习新技术) | 130 | 130 |
| · Design Spec | · 生成设计文档 | 60 | 60 |
| · Design Review | · 设计复审 | 60 | 60 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 15 |
| · Design | · 具体设计 | 30 | 30 |
| · Coding | · 具体编码 | 180 | 240 |
| · Code Review | · 代码复审 | 60 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 30 | 30 |
| Reporting | 报告 | 60 | 60 |
| · Test Report | · 测试报告 | 30 | 30 |
| · Size Measurement | · 计算工作量 | 10 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
| Total | · 合计 | 645 | 705 |
3.效能分析




4.设计实现过程
函数get_Parameter:获取命令行参数
random make类:随机生成数字和符号
calculate类:假分数转化为真分数,生成题目和答案,计算
主函数流程图:

查重流程图:


计算式生成流程图:

5.关键代码说明
def get_Parameter(): # 命令行控制模块
parser = argparse.ArgumentParser()
parser.add_argument('-n', help='设置题目数量', type=int) # 设置数目数量
parser.add_argument('-r', help='设置数值范围', type=int) # 设定题目数值范围
return parser.parse_args()
def get_Arithmeticl(self): # 获得随机数字与符号
symbol = [] # 符号
numerical = [] # 数字
syb = 0
n = 1
m = 0
i = random.randint(1, 3)
for x in range(i):
# 四则运算符号随机生成
sy = random.choice(['+', '-', '×', '÷'])
if sy == '+' or sy == '-':
syb += 10 ** (i - x - 1)
else:
syb += 2 * (10 ** (i - x - 1))
symbol.append(sy)
if self.r < 10:
n = int(10 / self.r)
if n == 1:
while m <= i:
numerical.append(Fraction(random.randint(1, self.r), random.randint(1, self.r)))
m += 1
else:
while m <= i:
nu = Fraction(random.randint(1, self.r * n), random.randint(1, self.r * n))
if nu <= self.r:
numerical.append(nu)
m += 1
return symbol, syb, numerical, i
def save_result(self, filename, data):
# filename为写入文件的路径,data为要写入数据列表.
file = open(filename, 'a', encoding='utf-8')
file.seek(0)
file.truncate() # 清空文件
for x in data:
x = '%s\n' % (x)
file.write(x)
file.close()
# 保存为结果文件
print('%s文件已保存' % filename)
def start():
# 主函数
args = get_Parameter()
calculate = Calculate() # 计算类
if args.n:
n = args.n
if args.r:
r = args.r
Exercises, Answers = calculate.check_and_make_question(n, r)
for x in range(n):
Answers[x] = '%d. %s' % (x + 1, calculate.cover_digital(Answers[x]))
print('已生成%d道题目\n题目数值范围:0-%d' % (n, r))
calculate.save_result('Exercises.txt', Exercises)
calculate.save_result('Answers.txt', Answers)
6.测试运行




7.项目小结
这一次结对项目是之前从来没有过的体验,第一次体验了合作编程,题目本身对我们来说有些困难,部分功能也没有
完全实现,但在结对过程中我们还是有所收获。我们能够及时交流互相的一些想法和意见,效率也有所提高,出现bug
也能及时交流并处理,最主要的是两个人能够取长补短,在研究代码的过程中也在相互学习,第一次结对编程难免会
有不足之处,希望能在以后的学习中加以改进。
浙公网安备 33010602011771号