我:
学号:1711425 姓名:ZXJ
结对编程对象:
学号:1711520 姓名:ZXH
一、作业要求
1.基本要求
a)300道四则运算题
b)100以内的数字
c)结果在[0-100]之间
d)包含两个运算符
2.进阶要求
a)题目避免重复
b)可扩展性
c)可定制(数量/打印方式)
d)具体定制
·是否有乘除法
·除法有无余数,是否支持分数,打印中每行的间隔可调整
二、开发环境
语言:Python
系统:window 10
软件:pycharm
三、过程分析及分工
1.分工:
程序大部分代码:ZXH
代码测试及寻找问题:ZXJ
2.过程分析:
一开始我们纠结选择什么语言进行开发,因为最近在学习python语言,所以最终选择了python。在课堂上看过
题目后,我们认为题目还是不难的,直到着手开始敲代码时才发现错得离谱呀。第一次尝试时我们想要采用运算符号
与数字都随机抽取的方式,发现运算符的处理很麻烦,所以放弃了。之后ZXH说我们不要想那么复杂,直接列出来不
就完了,他就开始操刀,我在旁边辅助。最终我们用共10个随机数字或字母排列组合,代表了所有可能的结果,有了
lambda函数我们更快速地写出所有逻辑。while循环控制题目数量在300以内。嵌套if语句控制结果在0-100之内。
四、遇到的问题及解决方案
1. 问题:输出题目数量不足300
原因:在判断式子答案大于100后,不输出式子,导致判断式子答案的次数为300,但是输出数量不足300
方案:加入一个整型变量count用作计数,每次输出后计数+1,while循环判断条件改为判断count的数值
2. 问题:对于结果不为整数的式子,无法显示正确的答案
原因:由于考虑到是小学题目,一开始我们定义变量全为整型,导致除法若无法整除而有余数,输出的答案就不正确
方案:未解决,经过讨论认为只有答案显示为分数才是最符合实际的,由于能力有限,确实想不到解决方案
3.问题:没有完成任何的进阶要求
原因:对于python的学习刚刚入门,能力不足
方案:在对python的学习更加深入后尝试解决
4.问题:第二个运算符大部分为“/”
原因:在列出运算符的所有排列组合方式时,将“/”都放在了第二位
方案:由于加减是同级运算,而乘除是同级运算,所以运算符顺序对出题没有影响,无需解决方案
五、代码测试结果
六、心得体会
这次的结对编程让我体会到合作的重要性,有些时候,出现BUG或者出现问题,一个人苦思冥想是找不出解决办法的。
而在合作过程中,对于对方思维的理解是很重要的,在ZXH提出把所有式子列出来的时候我是有点懵的,他开始敲代码之
后我才理解他的意思,之后出现过比较多的细节问题,也产生过分歧,在不断的沟通交流之后也得到了解决。而且,结对
编程的效率比一个人的效率高很多,我在旁边看着,ZXH一出错我就可以提醒他,否则代码测试的时候会因为找BUG而崩
溃的哈哈哈哈哈哈哈。
七、源代码
import random
class math_exam():
operator={
'1':lambda x,y,z:x+y+z,'2':lambda x,y,z:x-y-z,'3':lambda x,y,z:x*y*z,'4':lambda x,y,z:x/y/z,
'5':lambda x,y,z:x+y-z,'6':lambda x,y,z:x+y*z,'7':lambda x,y,z:x+y/z,'8':lambda x,y,z:x-y*z,
'9':lambda x,y,z:x-y/z,'z':lambda x,y,z:x*y/z
}
def math_operation(self):
count=0
while count<=300:
num_1 = random.randint(1, 100)
num_2 = random.randint(1, 100)
num_3 = random.randint(1, 100)
map = random.choice('12346789z')
if map=='1':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1,'+',num_2,'+',num_3,'=',b)
count=count+1
elif map=='2':
b = int(self.operator[map](num_1, num_2, num_3))
if 0<b<=100:
print(num_1, '-', num_2, '-', num_3, '=', b)
count=count+1
elif map == '3':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '*', num_2, '*', num_3, '=',b)
count=count+1
elif map == '4':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '/', num_2, '/', num_3, '=', b)
count=count+1
elif map == '5':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '+', num_2, '-', num_3, '=', b)
count=count+1
elif map=='6':
b =int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '+', num_2, '*', num_3, '=', b)
count=count+1
elif map=='7':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '+', num_2, '/', num_3, '=', b)
count=count+1
elif map=='8':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '-', num_2, '*', num_3, '=', b)
count=count+1
elif map=='9':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '-', num_2, '/', num_3, '=', b)
count=count+1
elif map=='z':
b = int(self.operator[map](num_1,num_2,num_3))
if 0<b<=100:
print(num_1, '*', num_2, '/', num_3, '=', b)
count=count+1
a=math_exam()
a.math_operation()