【结对编程】实现自动生成小学生四则运算题目
【结对编程】实现自动生成小学生四则运算题目
小组介绍
姓名 |
学号 |
任务 |
尹雯靖 |
1932401 |
完成自动生成四则运算的数据结构,并且完成对自动生成四则运算题目的编码。由艾一心在旁结对编程。负责撰写博客。 |
艾一心 |
1959106 |
完成功能一和功能二的数据结构,并且完成功能一和功能二的编码。由尹雯靖在旁结对编程。 |
遇到的困难
- 这是第一次尝试结对编程,所以首先遇到的困难就是两个成员不知道应该从何开始,所以我们去网上查阅了资料,了解了结对编程后,我们就开始着手准备编程了。
- 因为题目并不具体,所以各个功能都需要我们自己敲定,所以我们进行了充分的讨论之后才敲定了程序的功能:
-
- 艾一心:应该直接实现300道程序编程,除了整数外,还要支持真分数的四则运算。这样代码简洁,并且数据结构更简单,更容易实现。
- 尹雯靖:我们可以写一个可选择题目数量的程序,这样的程序更灵活,可以复用。可以设计更复杂的运算题。
-
- 艾一心:因为程序是给小学生使用的,所以不应该出现负数等高级运算,不然小学生是无法解答的。
- 尹雯靖:我们应该在生成计算题的同时生成题目答案,这样更加方便使用。我们还能添加一个实时单题运算的功能,选择这个功能后可以每次生成一道题。
- 艾一心: 如果要实现这个功能,应该同时附加一个判断每次输入结果是否正确的功能。
结对编程PSP表格
环节 | 说明 |
预计耗时(分钟) |
是实际耗时(分钟) |
Planning
|
计划
|
20
|
15
|
Estimate |
估计这个任务需要多少时间 |
/ |
/ |
Development
|
开发
|
120
|
200
|
Analysis |
需求分析 |
5 |
7 |
Design Spec
|
生成设计文档
|
/
|
/
|
Design Review |
设计复审(和同事审核设计文档) |
/ |
/ |
Coding Standerd
|
代码规范(为目前的开发制定合适的规范)
|
5
|
8
|
Design |
具体设计 |
8 |
12 |
Coding
|
具体编码
|
35
|
70
|
Code Review |
代码复审 |
20 |
30 |
Text
|
测试(自测,修改代码,提交修改)
|
20
|
30
|
Reporting |
报告 |
25 |
20 |
Text Report
|
测试报告
|
10
|
15
|
Size Measurement |
计算工作量 |
6 |
5 |
Postmortem & Process Improvement Plan
|
事后总结,并提出过程改进计划
|
5
|
5
|
Sum |
合计 |
279 |
407 |
编程过程记录
题目:实现自动生成四则运算题目的命令行程序。
(1)题目要求:
- 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)
- 除了整数外,还要支持真分数的四则运算
(2)思路:
- 四则运算加减乘除,采用两个随机数,由于不能出现负数,所以在对两个随机数进行减法运算的时候,需要进行比较大小,而除法在运算中,除数不能取0。
- 进行真分数运算应注意假分数的影响
(3)实现过程
- 定义函数:用def szys()实现随机生成四则运算,用def test()通过调用syzs()实现题库的制作.
- 所以代码分为三个部分:
- 第一部分是生成随机四则运算,最后输出算式并返回正确答案;
- 第二部是用户通过输入一个整数来输出所需要的算式,当输出的算式达到目标数量后,便一一输出答案;
- 第三部分为主函数,需要用户自己选择模式,当输入是‘1’时,是为四则运算,通过调用syzs()函数得到算式和返回值,用户输入答案后,便与用户输入值进行比较。当输入是‘2’时,是生成题库,并在最后输出答案。
编程实现
编程语言:Python
代码实现:
import random
# 尹雯靖负责的第一部分编程
# 实现自动生成四则预算的数据结构
def szys():
sym = ['+', '-', '×', '÷']
f = random.randint(0, 3)
n1 = random.randint(1, 20)
n2 = random.randint(1, 20)
result = 0
if f == 0: # 加法
result = n1 + n2
elif f == 1: # 减法,要先比较大小,防止输出负数
n1, n2 = max(n1, n2), min(n1, n2)
result = n1 - n2
elif f == 2: # 乘法
result = n1 * n2
elif f == 3: # 除法,要比较大小,并循环取整除
n1, n2 = max(n1, n2), min(n1, n2)
while n1 % n2 != 0:
n1 = random.randint(1, 10)
n2 = random.randint(1, 10)
n1, n2 = max(n1, n2), min(n1, n2)
result = int(n1 / n2)
print(n1, sym[f], n2, '= ', end='')
return result
# 艾一心实现的第二和第三部分编程
# 制作四则运算题库
def test():
sym = ['+', '-', '×', '÷']
print('输入所需要的题目数量')
n = int(input())
result = []
m = 0
while m <= (n - 1):
print(m + 1, end='、')
result.append(szys())
print(' ')
m = m + 1
m = 0
print('对应的答案:')
while m <= (n - 1):
print(m + 1, '、', result[m])
m = m + 1
print('选择出题模式')
print('1、实时四则运算')
print('2、制作定量题库')
n = int(input())
# 当输入1时,进行四则运算,调用函数syzs()
if n == 1:
while True:
result = szys()
j = input()
s = int(j)
if s == result:
print('right')
else:
print('error.,the answer is', result)
# 当输入2时,进行制作题库
if n == 2:
test()
测试运行:
- 先运行第一个模式----进行实时四则运算,结果:
- 运行第二个模式----制作定量题库,先选择生成的题目量:
- 然后生成题库以及对应的答案:
结对编程收获
姓名 |
感想 |
尹雯靖 |
同时编程,降低了沟通难度 结对编程要求两人同时在一起进行开发。笔者与队友在大多数时间里是按照结对编程的要求一同编程。很明显能感觉到,自己很熟悉在这段时间的编写的代码,即使是对方在掌控键盘编写。在一定程度上,减少了两人阅读对方代码,询问如何使用对方代码时消耗的时间。相较之下,程序有一部分代码并不是两人一起编写的,在使用仅由对方编写的代码时常会产生许多的疑惑,需要在沟通上花费不少的时间。这次结对编程的题目虽然不难,但是却是一次新的挑战。我们第一次尝试结对编程。
重要的不只有代码 在开发的过程中,无论怎么强调代码质量的重要性都是不为过的,毕竟代码质量是一个项目的根本。但除此之外,开发的其他环节也不应当被忽视。比如说,开发中各种文档的编写。在笔者进行结对编程时完成的而总结博客就相当于从宏观角度对整个开发流程的总结和反思。笔者在进行结对编程工作的同时就已经开始了博客的撰写。每过一段时间就会对博客中的一些内容进行更新。在写博客的过程中,笔者能够对编程的过程进行一定的反思,使得编程工作的目标更为明确。
|
艾一心 |
结对编程在时间规划上存在难度 结对开发的两人并不是一直能够抽出时间一同编程。时间的碎片化也增加了两人一同使用大块时间进行编程的难度。就笔者两人而言,在这两周中基本上只有晚上有可能同时有时间结对编程。而白天常常会是一人有空而另一人有事的情况。因而结对编程时,对于时间上的规划存在一定的难度。
两人合作,更易解决问题 在编程的过程中,笔者两人一同遇到了许多的困难:从编程语言的使用,到算法的设计,再到代码的实现。相较于单人编程,两人同时对问题进行思考,通过讨论发现两人解决问题的漏洞,互补双方解决问题的方法,有效地解决问题。
相互学习,共同进步 在进行结对编程时,每人都有一段时间负责在对方编程的过程中在旁边进行审核。在“旁审”队友编程的过程中,笔者从队友的编程方式吸取了许多有用的部分,比如算法实现的思路,代码编写习惯等。将这些优点融入到自己的编程中,优化了自己的编程方式。 |