此作业参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11245
coding地址:https://e.coding.net/etherealh/wfwork/new_new_f4.git
结对对象:孙佳豪
功能1. 四则运算
支持出题4个数的四则运算题目,所有题目要求作者有能力正确回答 (提示:1/3 != 0.33333333333333333333333333333333,而是无限长)。
为了快出成果,你快速造个控制台的版本,包括以后改版成更优秀界面的核心功能,并考虑到扩展。
你在老师面前作如下表演 (数字你用excel验算过了,UI的卖萌部分你还没有想好) 。
功能2. 支持括号
老师看了你的表演,大大赞赏了你。然后她说,"你的题库里怎么都是没有括号的题呢,我记得你当初括号就掌握得不好啊。"你的脸红了,对老师说,"给我2个小时时间,我给你一个新版本,有括号的。"
你拿出笔记本,偷偷微信你们《构建之法》班的学霸,她说肯定能行,但是细节信号不好你听不清,只捕捉到隐约几个词"逆波兰""后缀表达式""堆栈""我看好你""数据结构"。
两小时后,在老师面前你在控制台下输入f4,然后回车。
功能一,功能二和功能四展示如下:
功能3. 限定题目数量,"精美"打印输出,避免重复
"就这点儿题,像你当年做得那么快,一会儿就完成啦!"老师说,"另外,我想打印出来,上课也不能带台机器。又另外,你把答案也打出来呗,我把答案剪掉,题目给学生做。"
一看需求这么多,你生怕她会说,"这都是很简单的功能,你一定能完成吧"。你知道如果承诺今晚,明早交工的时候她一定想出了更多可怕的需求,你赶紧说,"老师我现在就做。"
你忘记怎么调用打印机了,就把答案与题目横向对齐,输出在文件的右边。告诉老师txt文件可以用WORD打开,也能打印。她满意而意味深长地笑了,表示同意。
你输入命令执行的时候,脑袋比手指头还疼。
功能三展示如下:
生成文件并保存:
要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,随笔有以下两种方式:(①允许两人写一份,得一份分数,二人均分;②如果每人写一份,内容不得抄袭,体会需要是自己的,分别得到自己博客的分数)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)
重要代码展示如下:‘
为完成功能四所用到约分的函数:
def dict_split(str1):#将分子和分母分别存储到不同的两个字典中输出约分 d1 = {} d2 = {} count1 = 0 count2 = 0 pred = 1 sign = 0 for s in str1: if s == '-': sign = s continue if s == '/': pred = 0 continue if pred == 1: d1[count1] = s count1 = count1 + 1 else: d2[count2] = s count2 = count2 + 1 numerator = take_integer(d1) # 分母 denominator = take_integer(d2) answer1 = -10000 if denominator == 0: return numerator else: we1 = numerator // denominator we2 = numerator % denominator if sign == '-': #判断结果是否为负 if we1 == 0: answer1 = sign + str(we2) +'/' + str(denominator) return answer1 else: answer1 = sign + str(we1) + ' ' + str(we2) + '/' + str(denominator) return answer1 else: if we1 == 0: answer1 = str(we2) + '/' + str(denominator) return answer1 else: answer1 = str(we1) + ' ' + str(we2) + '/' + str(denominator) return answer1
产生随机20道题部分:
def fixed(): #固定20道题目 right = 0 for j in range(20): exp = expression() print(exp,"=") in_answ = input("?") re_answ = answer(exp) if in_answ == re_answ: print("答对了你真是一个天才") right = right +1 else: print("你答案错了,再算一算吧,答案是", end= ' ') print(dict_split(re_answ)) print("一共20道题,你一共答正确了", right, "道题")
输入命令功能三的函数:
def deft_input(num):#指定输入多少个题目 right = 0 data = open("data.txt",'w+') num1 = int (num) if str.isdigit(str(num1)): for i in range(num1): exp = expression() exp1 = exp + '=' re_answ = answer(exp) print('{:<50}{:<25}'.format(exp1, dict_split(re_answ))) print('{:<50}{:<25}'.format(exp1, dict_split(re_answ)), file=data) else: print("题目数量必须是 正整数。")
此项作业重点在和难点我认为是功能四的约分和通过命令完成功能三,我们在约分时采用把分子分母分别存在两个字典里提取成数字在再进行运算,过程比较麻烦,应该还有更好的办法但是我们没有想到,功能三是一个需要命令一个不需要命令,这需要对python掌握很深才能做到,后来也是通过学习网上经验完成的。此次结对编程最大的收获就是客服两个人各自不一样的习惯共同向完成任务发展。
1、编程初期我和孙佳豪在开始的时间上有些矛盾,我是睡得早起的早,孙佳豪睡得晚起的晚,后来他按照我的时间做了调整
2、在编程逻辑上我在随机生成表达式函数上有一些逻辑Bug孙佳豪同学帮我改正
3、孙佳豪同学在一些变量引用中常常粗心,我也会给他指出
4、功能四的实现消耗的时间比较多
5、再有命令输出和无命令输出上也消耗了一些时间
要求2 给出结对开发的截图证据,要求截图能够证明你们是在结对编程。 (5分)
要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(25分)
coding地址:https://e.coding.net/etherealh/wfwork/new_new_f4.git