作业要求详情:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7631
结对成员:彭思雨
要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,博客是分别完成的)。
(1) 给出每个功能的重点、难点、编程收获。
功能一:
重点:除数为零以及分数除不尽问题。
难点:一开始写程序主要考虑除数不能为零,可是题目又要求是生成随机数,这点我和我队友不知道怎么处理。
编程收获:第一次使用的java,可是发现后面功能越大,java越难完成整个程序功能。后来改选用Python。一开始我队友建议用Python,我其实比较抵触,因为我没有学过这门语言,在暑假只是稍微了解一点。而且这周任务比较重,自己能力又有限,所以不像去接触一门新的语言,可是越到后面后面功能java越难完成,所以就尝试着学习python,我相信语言都是相通的。突然发现python真的好强大,语言简洁,功能齐全强大,基本都是调用函数就可以了,不需要自己写方法,这次逼着自己学习一门新语言,虽然现在还不太熟悉,可是总算开启学习python之路,。
功能二:
重点:判断括号匹配。
难点:括号匹配好好几种,先一个表达式里可以先有括号,在数字运算符,也可以先有加减乘除,在有括号,括号也可以在中间。
编程收获:此次代码是参考往届学长的,我们这个括号匹配不好,参考学长代码,感觉学长的代码简洁易懂,要是在java中,括号匹配就要用到栈,后缀表达式得出结果,而在python中不需要那么复杂,括号一共分为三种情况,左括号,右括号,还有就是没有括号,而不是两种情况,一开始就是想的两种情况,但是表达式有的不合理。收获到了,原来括号不能只有两种。
def _f4(self): from random import randint as r #直接导入randint函数,更名为r from random import uniform as ru #直接导入uniform函数,更名为ru,用于生成指定范围内的随机浮点数 from fractions import Fraction as f #直接导入fractions函数,更名为f ops = ['+', '-', '*', '/'] #存储操作符 kuohao = ['(', '', ')'] #存储括号 left1 = r(0, 1) left2 = r(0, 1) left3 = r(0, 1) right1 = r(1, 2) right2 = r(1, 2) right3 = r(1, 2) if left1 == 0: left2 = 1 left3 = 1 if right1 == 2: right2 = 1 right3 = 1 else: right2 = 2 right3 = 1 else: if left2 == 0: left3 = 1 right1 = 1 if right2 == 2: right3 = 1 else: right3 = 2 else: left3 = 0 right1 = 1 right2 = 1 right3 = 2 add_1 = ru(0, 1) add_1 = f(add_1).limit_denominator(10)#限制最大分母值,小数变分数 add_2 = ru(0, 1) add_2 = f(add_2).limit_denominator(10) add_3 = r(1, 10) add_4 = r(1, 10) ops1 = r(0, 2) ops2 = r(0, 3) ops3 = r(0, 3) eq = kuohao[left1] + str(add_1) + ops[ops1] + kuohao[left2] + str(add_2) +kuohao[right1] + ops[ops2] + kuohao[left3] + str(add_3) + kuohao[right2] + ops[ops3] + str(add_4) + kuohao[right3] return (eq)
for i in range(20): #输出20道题,分别判断输入结果与正确答案是否相同,按要求输出 _eq = f4()._f4() print(_eq, "=") _ans_right = f4()._f4_answer(eq = _eq) _ans = input("?") if _ans == _ans_right: print("答对啦,你真是个天才!") yes = yes+ 1 else: print("再想想吧,答案似乎是", _ans_right, "喔!") no= no + 1 print("你一共答对", yes, "道题,共20道题。") except: print("输入有误") return (0)
功能三:
重点:输入字符是否合法判断。
难点:输入字符是否合法这分好几种情况,因为情况较多,所以考虑不全成为一个难点。
编程收获:我们对输入的字符进行了是否正整数,是否是字符、小数、负数不合法情况进行判断。
功能四:
重点:支持分数出题和运算。
难点:支持分数运算。
编程收获:对分数运算,这个是在第一个功能的基础上修改的,学到了可以直接在自己定义的变量后面点方法。
def _f4_integer_parser(self,x): _p = "题目数量必须是 正整数。" try: x = int(x) if x >= 0: for i in range(x): _eq = f4()._f4() _right = f4()._f4_answer(eq = _eq) _eq = _eq + "=" print(_eq.ljust(40), _right)#方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。 else: print(_p) except: print(_p) return(0)
(2)给出结对编程的体会。
在结对编程前,我已经知道会有结对编程,一开始特别期待,可是后期天气变凉,我的热情也随着天气变淡了,在本次编程中,前几天,我和我的队友都是自己先想自己的,在构思,想着等想好在讨论,可是两天过去了,发现一点进展都没有,后来周六我和队友一起去食堂,一起讨论,一个上午把构思撸清楚,然后我们采用java来编程,上午过去了,真的发现两个人在一起,比一个人在一起效率高,因为一个人遇到问题,很难发现自己的问题在那里,而且好多细节都发现不了,自己编程代码错误率非常高,可是有队友可以降低代码错误率。而且在遇到自己掌握不太好的知识,而队友这块好,可以互补。而且自己平时写代码是写给自己看的,代码也不规范,可是有队友,就要尽量把代码写的让队友可以看懂,队友也会提出自己代码不规范,以后自己就会注意到这点,在以后的代码编程里,会更加严格要求自己,在这里,非常感觉杨老师,给了我这次机会,让我可以知道自己的不足,也非常感谢队友,纠正我的错误,同时我也意识到了自己编程能力差,还需要多多练习,虽然在结对作业中,我们有过争论,有个不愉快,但最终我们把整个工作一起做完,发现在工作的争执都是不可避免的,但是这也是一种成长。
(3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)
1.编程语言选择:
一开始我主张用java,因为c太麻烦,我对python不熟悉,而队友主张用C,因为她java不太熟悉,在一番争执,我们做了功能分析,一开始都C和java都可以,但是在分析到第三个功能,我们俩就感觉难度越来越大,班里的同学建议用python,我们最终选择了Python.
2.括号匹配:
本来要用java的,可是在括号匹配这里,由于栈这块知识以及忘得差不多,所以放弃了。然后我们在网上搜索资料,正好看到有往届学长得代码,用0、1、2代替左括号,没有括号,右括号这三种情况,但是这块代码不多,理解起来还是比较困难得。
3.代码改善:
在第一个功能完成后,我们就在改善功能,一直在调bug ,总是会有好多Bug,各种问题,一个标点找了好好时间。
4.除数为0情况:
一开始没有考虑除数为零情况,所以运行总是有错误,这个问题真得不知道怎么办,除数不可以为零但是被除数可以为零,最后发现python 中可以限定随机数范围。
5.调用函数:
因为不熟悉Python,所以一开始看了好多Python函数,在代码中调用函数,都是一边编程一边查函数,这个时间也是非常耗时的。
6代码规范:
因为Python和其他语言还不太一样,在编写代码时,总是在一行语句完成时多加一个分号,在定义新的变量时,也是经常给出类型,看来这原有的习惯需要多注意。
要求2 给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。 (5分)
编程地点:一食堂二楼。
计算机:杨萍电脑。
可选项:学习区。
要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(25分)
源代码地址:https://e.coding.net/SpringSun/sizeyunsuan.git