要求0:作业地址:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2266】
要求一:git地址:https://git.coding.net/hanyh343/f4.git
要求二:结对编程同学:谢霖 学号:2016011901 博客地址:http://www.cnblogs.com/xlin-blog/
重点、难点、编程收获
功能一:
虽然输入全是整数,但是输出的既可以是整数也可以是小数,而且小数的小数点后几位也是不固定的,且输入的整数是随机产生的,主要用了python中的random标准库,而且我们用了eval函数产生12~14位的小数,用round函数确定无限小数的位数是三位
功能二:
运算符增加了括号,且是随机产生的,仍然用random标准库生成,括号的顺序我们没有用逆波兰解决,只是用了if语句,因为我们对逆波兰不太了解,搜索了也没太弄明白
功能三:
因为前两个一直没弄出来让用户自己选择题目的数量,所以再弄功能三的时候没有激情和动力
编程收获:展示代码
#!/usr/bin/python class f4(object): def __init__(self): pass def _f4_integer_parser(self,x): while True: x=raw_input('输入一个整数:') if x.isdigit(): break else: print('请输入一个整数') def _f4(self): from random import randint as m from random import uniform as n from fractions import Fraction as p ops = ['+', '-', '*', '/'] _b1 = m(0, 1) _b2 = m(0, 1) _b3 = m(0, 1) _l1 = m(1, 2) _l2 = m(1, 2) _l3 = m(1, 2) add_1 = n(0, 1) add_1 = p(add_1).limit_denominator(10) add_2 = n(0, 1) add_2 = p(add_2).limit_denominator(10) add_3 = m(1, 10) add_4 = m(1, 10) o_1 = m(0, 2) o_2 = m(0, 3) o_3 = m(0, 3) ex = str(add_1) + ops[o_1] + str(add_2) + ops[o_2] + str(add_3) + ops[o_3] + str(add_4) return (ex) def _f4_answer(self,ex): _answer = eval(ex) _answer=str(round(_answer,3)) return(_answer) def _f4_input(self): try: _y = 0 _z = 0 for i in range(10): _ex = f4()._f4() print(_ex, "=") _ans_right = f4()._f4_answer(ex = _ex) _ans = input("?") if _ans == _ans_right: print("回答正确.") _y = _y + 1 else: print("回答错误,正确答案是", _ans_right) _z = _z + 1 print("总共10道题,你答对", _y, "道题") except: print("输入有误") return(0) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument("-c", "--cin") args = parser.parse_args() if args.cin == None: f4()._f4_input() else: f4()._f4_integer_parser(args.cin)
我们的要求一的代码在f4.py中,f6.py存放的是要求二的代码,主要是运用了一个循环结构判断输入的X题数是否为整数,是跳出循环否继续输入一个X
还有就是用了python中的random产生随机数,进行四则运算
def _f4_integer_parser(self,x): while True: x=raw_input('输入一个整数:') if x.isdigit(): break else: print('请输入一个整数')
还有就是用eval将结果变成12~14位的小数,然后我们用了round()函数固定小数位数为三位
def _f4_answer(self,ex): _answer = eval(ex) _answer=str(round(_answer,3)) return(_answer)
要求二代码
#!/usr/bin/python class f6(object): def __init__(self): pass def _f6(self): from random import randint as m from random import uniform as n from fractions import Fraction as p ops = ['+', '-', '*', '/'] bra = ['(','',')'] _b1 = m(0, 1) _b2 = m(0, 1) _b3 = m(0, 1) _l1 = m(1, 2) _l2 = m(1, 2) _l3 = m(1, 2) if _b1 == 0: _b2 = 1 _b3 = 1 if _l1 == 2: _l2 = 1 _l3 = 1 else: _l2 = 2 _l3 = 1 else: if _b2 == 0: _b3 = 1 _l1 = 1 if _l2 == 2: _l3 = 1 else: _l3 = 2 else: _b3 = 0 _l1 = 1 _l2 = 1 _l3 = 2 add_1 = n(0, 1) add_1 = p(add_1).limit_denominator(10) add_2 = n(0, 1) add_2 = p(add_2).limit_denominator(10) add_3 = m(1, 10) add_4 = m(1, 10) o_1 = m(0, 2) o_2 = m(0, 3) o_3 = m(0, 3) ex = bra[_b1] + str(add_1) + ops[o_1] + bra[_b2] + str(add_2) + bra[_l1] + ops[o_2] + bra[_b3] + str(add_3) + bra[_l2] + ops[o_3] + str(add_4) + bra[_l3] return (ex) def _f6_answer(self,ex): _answer = eval(ex) _answer=str(round(_answer,3)) return(_answer) def _f6_input(self): try: _y = 0 _z = 0 for i in range(10): _ex = f6()._f6() print(_ex, "=") _ans_right = f6()._f6_answer(ex = _ex) _ans = input("?") if _ans == _ans_right: print("回答正确.") _y = _y + 1 else: print("回答错误,正确答案是", _ans_right) _z = _z + 1 print("总共10道题,你答对", _y, "道题") except: print("输入有误") return(0) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument("-c", "--cin") args = parser.parse_args() if args.cin == None: f6()._f6_input() else: f6()._f6_integer_parser(args.cin)
要求二里主要是随机添加括号,我们用了if语句随机添加括号
if _b1 == 0: _b2 = 1 _b3 = 1 if _l1 == 2: _l2 = 1 _l3 = 1 else: _l2 = 2 _l3 = 1 else: if _b2 == 0: _b3 = 1 _l1 = 1 if _l2 == 2: _l3 = 1 else: _l3 = 2 else: _b3 = 0 _l1 = 1 _l2 = 1 _l3 = 2
结对编程的体会
合作编程大大节省了我们的时间,尤其是当我们编译过程中出错,一个人改错另一个人搜索更适合的方法和出错的原有,且两人之间可以相互交流意见,能补充一个人弱势的地方,而且编程更加具有积极性
至少3项在编码、争论等活动中花费时间较长,给你较大收获的事件。
- 因为我们的python基础很弱,这次编程可以说是一边查一边改的,在查找资料上花费了大量时间。
- 关于Python输入阿拉伯数字,尝试了很多方法但是还是没能改出来,是我们这次作业的一个很大的遗憾,所以我们没能实现用户输入答题题数
- 关于小数点后几位的,一开始我们频频撞墙就是改不了位数,频频报错,后来我们直接写死位数,用round函数直接固定3个位数
运行截图