20200924-5 四则运算,结对

此作业要求参见: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],里面有测试用例。

原文地址:https://www.cnblogs.com/zhaoxp1/p/13772988.html