zoukankan      html  css  js  c++  java
  • 20170928-3 四则运算试题生成

    作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/997

    结对伙伴:苗威

    git:https://git.coding.net/songyuu/f4.git

    要求1:

    (1) 给出每个功能的重点、难点、编程收获。

    功能1的重点是随机生成4个数字和符号,在python中用random标准库解决。

    功能2的重点是随机生成括号,用random标准库解决。难点是括号生成的顺序,没有用逆波兰解决,觉得一共就4个数字,直接用if语句解决。

    功能3的重点是命令行参数,用argparse标准库解决。难点是判断是否有命令行参数,学习了语法加上自己的思考解决。

    功能4的重点是支持分数,用fractions标准库解决,难点超级多,python内置函数eval()输出为浮点数,大约14-16位,生成的分数分子分母都有14-16位,这样不符合规定,所以要限制位数。

    经过多次实验,例如1/3=0.3333333....如果限制在小数点后10位以下都可以得到1/3,看了一篇博客,写的是python底层的运行机制,如果是4则运算,只限制10^4即可。

    感觉时间不太够了,所以没有完成功能4的一又二分之一 表示 1 1/2。

    (2)给出结对编程的体会。

    结对编程体会到团队合作的好处,可以交流解决问题,互相讨论互相学习。

    (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 

    一开始没有用oop方式写代码,经讨论后改正。

    复审中为避免写重复代码而把计算答案写在了一个函数中,开始没有注意,没有给函数变量,导致算的答案是再次随机生成四则运算的答案。改正这个错误让我更深刻的理解运行机制。

    学python不久,导致编码不是很熟练,经过这次作业,感觉编码比上次作业要编的好看。

    花费时间最长的就是python如何单元测试,期间想换成C++,但是没换,找各种资料学习,编写了一个用于单元测试的代码。

    最后用pyinstaller包生成exe文件,相同操作系统有的电脑就好使,有的就不好使。

    要求2 :

    照片:

    要求3:已经用tortoiseGit上传。

    四则运算:

    先把所有代码附上:

    #by: sy
    class f4(object):
        def __init__(self):
            pass
        def _f4(self):
            from random import randint as r
            from random import uniform as ru
            from fractions import Fraction as f
            ops = ['+', '-', '*', '/']
            bra = ['(', '', ')']
            _l1 = r(0, 1)
            _l2 = r(0, 1)
            _l3 = r(0, 1)
            _r1 = r(1, 2)
            _r2 = r(1, 2)
            _r3 = r(1, 2)
            if _l1 == 0:
                _l2 = 1
                _l3 = 1
                if _r1 == 2:
                    _r2 = 1
                    _r3 = 1
                else:
                    _r2 = 2
                    _r3 = 1
            else:
                if _l2 == 0:
                    _l3 = 1
                    _r1 = 1
                    if _r2 == 2:
                        _r3 = 1
                    else:
                        _r3 = 2
                else:
                    _l3 = 0
                    _r1 = 1
                    _r2 = 1
                    _r3 = 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)
            o_1 = r(0, 2)
            o_2 = r(0, 3)
            o_3 = r(0, 3)
            eq = bra[_l1] + str(add_1) + ops[o_1] + bra[_l2] + str(add_2) + 
                 bra[_r1] + ops[o_2] + bra[_l3] + str(add_3) + bra[_r2] + 
                 ops[o_3] + str(add_4) + bra[_r3]
            return (eq)
        def _f4_answer(self,eq):
            from fractions import Fraction as f
            _answer = f(eval(eq)).limit_denominator(1000)
            _answer = str(_answer)
            return(_answer)
        def _f4_input(self):
            try:
                _y = 0
                _n = 0
                for i in range(20):
                    _eq = f4()._f4()
                    print(_eq, "=")
                    _ans_right = f4()._f4_answer(eq = _eq)
                    _ans = input("?")
                    if _ans == _ans_right:
                        print("答对了,你真是个天才!")
                        _y = _y + 1
                    else:
                        print("你再想想吧,答案似乎是", _ans_right, "喔!")
                        _n = _n + 1
                print("你一共答对", _y, "道题,一共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)
    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)

    四个函数功能分别是:

    1.生成算式。

    2.计算生成算式。

    3.无命令行参数的功能函数。

    4.有命令行参数的功能函数。

    运行截图:

    命令行参数:

    输出到txt:

     

    结对编程环境:

    软件:pycharm

    地点:寝室

     

  • 相关阅读:
    存储过程系列之存储过程sql查询存储过程的使用
    SQL Server 连接字符串和身份验证详解
    存储过程
    Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)
    Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)
    Objective-C:MRC手动释放对象内存举例(引用计数器)
    C语言:内存的分配与管理
    Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
    Objective-C:在类中设置不同协议
    Objective-C:继承的体现
  • 原文地址:https://www.cnblogs.com/songyuu/p/7648695.html
Copyright © 2011-2022 走看看