要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,随笔有以下两种方式:(①允许两人写一份,得一份分数,二人均分;②如果每人写一份,内容不得抄袭,体会需要是自己的,分别得到自己博客的分数)。
(1) 给出每个功能的重点、难点、编程收获。
结对编程伙伴:思得 李思源
开发环境 Windows10 (全程使用李思源同学笔记本开发)
开发工具是 Visual Studio 2019(需安装Python开发环境,Python版本选择3.8)
版本控制:Git
Coding:https://e.coding.net/thinkget/wf/f4.git
功能1. 四则运算 功能2. 支持括号 功能4. 支持分数出题和运算 不需要进行文件操作,功能相近,一起完成。
重点:四则运算,支持括号,分数运算
难点:计算顺序,括号内先计算,分数与除法的区分。
编程收获:不局限于固定思维,一般想到计算会用栈来完成,但本题说4个数字,用穷举暴力就可以很好完成。还学会了python随机数的使用,用随机数表示运算符,生成随机的测试数字等。
def random_yunsuan(a, b, t, side=0):#进行运算和位置关系处理 if side==0: if t==1: return a+b elif t==2: return a-b elif t==3: return a*b elif t==4: return a/b elif side==1: if t==1: return b+a elif t==2: return b-a elif t==3: return b*a elif t==4: return b/a
def
build_question():是产生算术题的程序,采用暴力实现,代码逻辑简单,代码量较大,读者可以从git仓库获取源码自行阅读。
测试截图:
功能3. 限定题目数量,"精美"打印输出,避免重复
重点:限定题目数量
难点:文件操作,写入到txt中。
编程收获:加强了python文件的读写操作理解。
def output(x): integer = "请输入正整数。" try: x = int(x) if x >= 0: data=open("data.txt",'w+') for i in range(x): suan_shi, sum=build_question() suan_shi =suan_shi + "=" zs=(int)(sum.numerator/sum.denominator) fs=sum-zs if fs==Fraction(0, 1): #print(suan_shi.ljust(40), str(zs)) print ('{:<30}{:<20}' .format(suan_shi,str(zs)),file=data) elif zs==0 and fs!=Fraction(0, 1): #print(suan_shi.ljust(40), str(fs)) print ('{:<30}{:<20}' .format(suan_shi,str(fs)),file=data) else: if fs<Fraction(0, 1): fs=-fs #print(suan_shi.ljust(40), str(zs)+" "+str(fs)) print ('{:<30}{:<20}' .format(suan_shi,str(zs)+" "+str(fs)),file=data) data.close() else: print(integer) except: print(integer) return(0)
测试截图:
功能5 未来
PyQt可以很方便的将Python代码实现成GUI模式,直接调运相应函数即可实现。
(2)结对编程的体会
在这次结对编程中,两个人合作编写代码可以高效的进行开发,因为结对编程让两个人写的代码不断处于“复审”过程,发现小错误可以及时改正,因为代码要两个人看,所以代码也更加规范。而且两个人编程会有更多“奇思妙想”,我想用栈实现,李思源同学指出暴力法实现更加简洁。在这里我要对李思源同学表示感谢,感谢李思源同学治好了我的“拖延症”,拉着我在假期之前完成了这次作业,我本来想假期在写的,事实也证明了假期是不可能写作业的,从这几天就能看出,一放假立马进入“小埋”模式,今天总算是意识到自己有多颓废(其实是很无聊,不知道该干啥),开始写博客,而李思源同学在完成编程后第一时间就发布博客了,对不起,严重拖了团队的后腿。
(3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)
1. 开发前,就开发技术、环境等进行讨论。
我熟悉Python,而李思源同学熟悉C#,对于我来说学习C#时间成本过高,感谢李思源同学的迁就,更佩服李思源同学学习能力,Python比我写的都好。
2.代码逻辑
我想借鉴题目里隐晦提出的逆波兰表达式,结合栈来实现,李思源同学提出:题目要求里提出只有4个数字运算,采用暴力法代码逻辑更清晰,也更容易实现。很佩服他的编程思维,化繁为简。
3.代码规范
李思源同学是C#大神,但总是习惯于在最后加“;”号,我觉得以后从事的研究里Python用的会更多,提醒了李思源同学“习惯性”操作。
4.Python随机数的使用
第一次接触Python随机数,并通过查阅资料学会了如何使用。
5.命令行参数的使用,代码虽然使用编辑器写的,但程序是交付用户使用,命令行参数很重要。
要求2 给出结对开发的截图证据,要求截图能够证明你们是在结对编程。 (5分)
图片由学长帮忙拍摄,结对编程地点:自习室。
要求3 使用coding.net做版本控制。
https://e.coding.net/thinkget/wf/f4.git