一、题目要求
题目1:
我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
- 能够自动生成四则运算练习题
- 可以定制题目数量
- 用户可以选择运算符
- 用户设置最大数(如十以内、百以内等)
- 用户选择是否有括号、是否有小数
- 用户选择输出方式(如输出到文件、打印机等)
- 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
二、角色分配
本次作业要求两个人合作完成,驾驶员和导航员两个角色:
驾驶员:简**
基本完成全部代码工作,程序基本实现全部要求功能,并将代码上传到GitHub代码托管系统(此处附代码地址)中,
并对导航员在本次编程工作中起到的作用给出客观评价;
导航员:韩*
辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试,并且根据代码检查表对驾驶员的本次工作进行评价;
三、函数功能
四则运算生成函数
# def newint() 生成整数四则运算
def newint():
global questionString,rawEquation
opr = ['+', '-', '×', '÷']
# 以下fh取符号,n1、n2取随机整数
fh = random.randint(0, 3)
n1 = random.randint(1, 20)
n2 = random.randint(1, 20)
if fh == 1:
# 防止出现负数,则取大的在前,小的在后
n1, n2 = max(n1, n2), min(n1, n2)
elif fh == 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)
rawEquation += str(n1) + opr[fh] + str(n2) + '=' + '\n'
# def newfra() 生成真分数四则运算
def newfra():
global questionString, rawEquation
opr = ['+', '-', '×', '÷']
# 创造n1、n2为随机分数
fh = random.randint(0, 3)
t1 = random.randint(1, 10)
t2 = random.randint(t1, 10)
n1 = Fraction(t1, t2)
t1 = random.randint(1, 10)
t2 = random.randint(t1, 10)
n2 = Fraction(t1, t2)
if fh == 1:
n1, n2 = max(n1, n2), min(n1, n2)
elif fh == 3:
n1, n2 = max(n1, n2), min(n1, n2)
rawEquation += str(n1) + opr[fh] + str(n2) + '=' + '\n'
# def newtest() 生成制定指定数量的四则运算题目
def newtest():
global questionString, rawEquation
opr = ['+', '-', '×', '÷']
n = theNumberOfquestion
m = 0
while m <= (n - 1):
# 随机四则运算,设置分数四则运算的概率为1/4,整数为3/4
fh = random.randint(0, 4)
if fh == 0:
newfra()
questionString = rawEquation
else:
newint()
questionString = rawEquation
m = m + 1
四、运行结果
五、总结
本次结队编程作业比上次难度稍难一些,因为加入了编程和测试。这次结对编程应该可以算作是我第一次真正意义上的结对编程,一方面感觉很新鲜,另一方面又感觉很有收获。在这次结对编程的整个过程中,我们都有思路的碰撞。其实我觉得结对编程并不是一个人在编另一个人在看,而是两个人在商量好思路之后,一个人负责编写,另一个人负责检查,这样就减小了出错的概率。编程过程中会犯一些小的错误,这些错误在编程的过程当中,自己不会发现,但是领航员可以发现问题,及时提醒。一个人的精力是有限的,虽然这次的编程相对于大的项目来说,是挺容易的,但是如果一个人总在编,时间长了效率就会变低,这个时候就要互换角色,换另一个人来编。这就要求两个人对代码非常熟悉,所以两个人在编程之前一定要确定好思路,保证两个人的思路是一致的。如果两个人在长期的磨合中,能够达到编码习惯也一样就完美了。还有一点,就是在驾驶员编程的过程中,如果遇到什么困难,这个时候领航员如果可以实现就最好不过,如果恰好领航员也不会,这个时候就要两个人一起查资料,然后把这个问题解决。最后一点就是,每个人都有自己的编程习惯和编程风格,结对编程是一个很好的学习别人的优点改正自己的缺点的过程,最后达到一个互利共赢的目的!总之,这次结对编程让我受益匪浅,以后有机会也会尽量多尝试这种方法,希望能从别人身上学到更过的东西。