此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7629
git地址:https://e.coding.net/sxl357/f4.git
结对伙伴:宋晓丽
使用语言:python
测试框架:UnitTest
测试内容:四则运算试题生成
要求1 对每个功能,先给出测试用例,然后再编码功能。请注意把测试用例视为功能需求完成的检验指标。 (40分)
要求2 在博客报告测试用例全部fail 到 全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。 除了最初的框架,测试用例中存在一次性pass没有经过fail的,也报告一次性通过,给出如此优秀地实现了这部分功能的代码。由2位同学中的一位发布博客提交到作业,指明自己的结对伙伴;另一位在作业中引用这一博客,指明自己的结对伙伴。(40分)
错误一:使用测试用例2
在测试循环出题功能时出现错误:
发现是由于如果用户输入?的话就会出错。于是我们找到对应的函数进行了修改:加上对问号的替换,如果用户输入?就将"?"替换为""。
原代码:
def question(): num = 0 global correctNumber # 定义全局变量,统计答对的次数 while num <20: generate=Expression() #定义对象 expression = generate.expre()#调用generate()函数,生成运算式 print(expression + "=") expression1 = make_Expression(expression) # 将中缀表达式转换为后缀表达式 result = make_Value(expression1) # 计算后缀表达式的值 userAnswer = input() # 输入你的答案 if (float(userAnswer) == float(result)): # 判断用户结果是否和正确答案相等 correctNumber += 1 print("答对了,你真是个天才!") else: result = str(result) print('再想想吧,答案似乎是' + result + '喔!') num += 1 correctNumber = str(correctNumber) print("你一共答对" + correctNumber + "道题,共20道题。")
修改后代码:
def question(): num = 0 global correctNumber # 定义全局变量,统计答对的次数 while num <20: generate=Expression() #定义对象 expression = generate.expre()#调用generate()函数,生成运算式 print(expression + "=") expression1 = make_Expression(expression) # 将中缀表达式转换为后缀表达式 result = make_Value(expression1) # 计算后缀表达式的值 userAnswer = input() # 输入你的答案 if '?' in userAnswer: userAnswer = userAnswer.replace('?', '')#str.replace(old,new,max)方法,把字符中的old替换成new,且替换不超过max次 if (float(userAnswer) == float(result)): # 判断用户结果是否和正确答案相等 correctNumber += 1 print("答对了,你真是个天才!") else: result = str(result) print('再想想吧,答案似乎是' + result + '喔!') num += 1 correctNumber = str(correctNumber) print("你一共答对" + correctNumber + "道题,共20道题。")
错误二:使用测试用例3
判断用户答案和结果是否相等的时候出现错误:
我们发现输入正确的答案,结果是错的,后来计算了多道题时发现,输入整数都是错误的,只有输入浮点数才能正确。
原代码
def question(): num = 0 global correctNumber # 定义全局变量,统计答对的次数 while num <20: generate=Expression() #定义对象 expression = generate.expre()#调用generate()函数,生成运算式 print(expression + "=") expression1 = make_Expression(expression) # 将中缀表达式转换为后缀表达式 result = make_Value(expression1) # 计算后缀表达式的值 userAnswer = input() # 输入你的答案 if '?' in userAnswer: userAnswer = userAnswer.replace('?', '')#str.replace(old,new,max)方法,把字符中的old替换成new,且替换不超过max次 if (userAnswer==result): # 判断用户结果是否和正确答案相等 correctNumber += 1 print("答对了,你真是个天才!") else: result = str(result) print('再想想吧,答案似乎是' + result + '喔!') num += 1 correctNumber = str(correctNumber) print("你一共答对" + correctNumber + "道题,共20道题。")
修改后:
将判断结果是否相等部分进行了修改,将用户的输入转换为浮点数再进行比较
if (float(userAnswer) == float(result)): # 判断用户结果是否和正确答案相等 correctNumber += 1 print("答对了,你真是个天才!") else: result = str(result) print('再想想吧,答案似乎是' + result + '喔!')
最终截图:
将错误一二三完成修正后:最后终于全部通过了。三个测试通过的截图如下:
表达式求值功能(使用测试用例1)
规范化输出测试:(使用测试用例5)