此作业要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11245
编程语言:phython
结对伙伴:樊培毅
地点:寝室
功能1. 四则运算
功能2. 支持括号
功能1和功能2一起实现,运行截图如下:
难点:(1)括号的生成和四则运算符号的优先级
(2)随机生成数字0-9
关键代码:
1 # coding=utf-8 2 from random import randint 3 from random import choice 4 ops = ['+','-','*','/'] 5 bra = ['(', '', ')'] 6 #com = input('>') #用户输入 7 cot = 0 #答对的题 8 x = 0 9 while x < 20 : 10 s1 = randint(1,10) 11 s2 = randint(1,10) 12 s3 = randint(1,10) 13 s4 = randint(1,10) 14 op1 = choice(ops) #随机运算符 15 op2 = choice(ops) 16 op3 = choice(ops) 17 """括号""" 18 bra_1 = ['' , '' ,''] 19 bra_2 = ['' , '' , ''] 20 i = ii =0 21 while (i ==0 and ii ==2) or abs(i-ii)==1 22 or ii < i : 23 i = randint(0,2) 24 ii = randint(0,2) 25 26 bra_1[i] = '('; bra_2[ii]=')' 27 28 while op1 == op2 == op3 : 29 op1 = choice(ops) #随机运算符 30 op2 = choice(ops) 31 op3 = choice(ops) 32 33 eq = bra_1[0] + str(s1) + op1 + bra_1[1] + str(s2) + 34 bra_2[0] + op2 + bra_1[2] + str(s3) + bra_2[1] + op3 35 + str(s4) + bra_2[2] 36 res = eval(eq) 37 if len(str(res) ) > 5: 38 continue 39 x += 1 40 print(eq) 41 print("?") 42 in_res=eval(input()) 43 # in_res =eval( input('?')) 44 if in_res == res: 45 print('算对啦,你真是个天才!') 46 cot += 1 47 else: 48 print('再想想吧,答案似乎是%s喔!'%res) 49 50 print('你一共答对%s道题,共20道题'%cot)
功能3. 限定题目数量,"精美"打印输出,避免重复
运行截图:
难点:(1)将生成的四则运算试题打印到文本上
(2)不能重复
关键代码:
1 from random import randint 2 from random import choice 3 import os 4 ops = ['+','-','*','/'] 5 bra = ['(', '', ')'] 6 com = input('>') #用户输入 7 com_list = eval(com) 8 ''' 9 while com_list[2].isdigit() == False: 10 print('题目数量必须是正整数') 11 com = input('>') #用户输入 12 com_list = com.split() 13 ''' 14 15 def xx(): 16 s1 = randint(1,10) 17 s2 = randint(1,10) 18 s3 = randint(1,10) 19 s4 = randint(1,10) 20 op1 = choice(ops) #随机运算符 21 op2 = choice(ops) 22 op3 = choice(ops) 23 """括号""" 24 bra_1 = ['' , '' ,''] 25 bra_2 = ['' , '' , ''] 26 i = ii =0 27 while (i ==0 and ii ==2) or abs(i-ii)==1 28 or ii < i : 29 i = randint(0,2) 30 ii = randint(0,2) 31 32 bra_1[i] = '('; bra_2[ii]=')' 33 34 while op1 == op2 == op3 : 35 op1 = choice(ops) #随机运算符 36 op2 = choice(ops) 37 op3 = choice(ops) 38 39 eq = bra_1[0] + str(s1) + op1 + bra_1[1] + str(s2) + 40 bra_2[0] + op2 + bra_1[2] + str(s3) + bra_2[1] + op3 41 + str(s4) + bra_2[2] 42 res = eval(eq) 43 return [eq,res] 44 45 46 47 eq = []; res = [] 48 while len(res) < com_list: 49 a = xx() 50 if a[1] in res or len((str(a[1])) ) >6: #结果一样的直接就不要 51 continue 52 eq.append(a[0]) 53 res.append(a[1]) 54 55 f= open('题目.txt','w') 56 for i in range(len(eq)): 57 print('{0:15}'.format(eq[i]),end = '') 58 print(res[i]) 59 xxx = 17 - len(eq[i]) 60 f.write(str(eq[i]+' '*xxx)) 61 f.write(str(res[i])+' ') 62 f.close() 63 os.system('题目.txt') #决定是否打开txt
功能4. 支持分数出题和运算
未实现
功能5 未来
还有可能把程序改造成GUI版,把程序改造为web版,把程序移植为android/ios版。今天留好接口,明天就不发愁。 (0分)
要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,随笔有以下两种方式:(①允许两人写一份,得一份分数,二人均分;②如果每人写一份,内容不得抄袭,体会需要是自己的,分别得到自己博客的分数)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)
(每人写一份博客)
关于结对编程的体会:
首先自己是不擅长编程,代码能力较差,开始结对时会有一定的心理压力,但在开始后,发现两个人一起编程思路会比较活跃,氛围也较好,有简单又错的地方会互相提醒,遇到一些难点,比如逆波兰,两个人也会查资料,然后汇总自己认为较好的资料,认为结对编程效率还是很好的,互相督促共同提高,也在这个过程中有所收获。
以下是完成作业过程中重要的时刻:
1.开始想手动输入四则运算表达式,后来觉得手动输入20道题工程量也很大,就选取了随机生成
2.在单元测试过程中,参考了之前的代码,复制来运行的时候总有问题,开始以为是某个函数不对,查了一些函数觉得没问题开始考虑是缩进的问题,又重新缩进。
3.语言的选取,开始想用c语言,经过一番讨论认为phython会相对容易。
4.功能三实现时,本来想对字符串做限定,后来由于函数总不对,就采用粗暴的直接输入数字了。
5.一起查了很多资料,发现了自己平时学习的弊端。
要求2 给出结对开发的截图证据,要求截图能够证明你们是在结对编程。 (5分)
此图片为2人共同所有
要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(25分)
代码地址为https://hiii1.coding.net/p/sizeyunsuan/d/zhao/git/tree/master
虽然只有5分,但此题如果做错,因为教师得不到你的代码,所以会导致“功能实现”为负分。
代码要求在 coding.net 做版本控制。要求push&pull时使用git客户端,不允许使用web页面。
要求频繁checkin。要求在PSP中记录的每次离开键盘30分钟以上,需要checkin。如果你持续长达4小时不离开键盘,教师要求展示此项能力。量化的可考核的指标要求: 每个功能,要求有4次以上 checkin,展示(1)逐步实现功能和(2)修复bug时的过程; 每次checkin都要求可以成功编译。
推荐git客户端tortoisgit。
推荐先pull [https://github.com/weijunying2019102969/novelsfortest.git],里面有测试用例。