结对编程

要求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项在编码、争论等活动中花费时间较长,给你较大收获的事件。

  1. 因为我们的python基础很弱,这次编程可以说是一边查一边改的,在查找资料上花费了大量时间。
  2. 关于Python输入阿拉伯数字,尝试了很多方法但是还是没能改出来,是我们这次作业的一个很大的遗憾,所以我们没能实现用户输入答题题数
  3. 关于小数点后几位的,一开始我们频频撞墙就是改不了位数,频频报错,后来我们直接写死位数,用round函数直接固定3个位数

运行截图

原文地址:https://www.cnblogs.com/hanyh343/p/9933145.html