• 20200924-5 四则运算试题生成,结对


    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11245

    代码地址:https://e.coding.net/zhangbj/f4/f4.git

    结对对象:王子一

    要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,随笔有以下两种方式:(①允许两人写一份,得一份分数,二人均分;②如果每人写一份,内容不得抄袭,体会需要是自己的,分别得到自己博客的分数

    功能一. 四则运算

    支持出题4个数的四则运算题目,所有题目要求作者有能力正确回答 (提示:1/3 != 0.33333333333333333333333333333333,而是无限长)。

    为了快出成果,你快速造个控制台的版本,包括以后改版成更优秀界面的核心功能,并考虑到扩展。

    答:

    重点难点:控制题目个数,随机生成运算符和运算数,并且当含有分数(不能转化成有限小数的)时,该如何计算?由于是随机生成数,那么当做分数运算时如何确保分母不为零。

    因为python中有将浮点数转化成分数的方法:fraction模块提供有关有理数的算术表达和计算,实际上就是分数的表达和计算。也有生成随机数的方法:randint随机生成整数,uniform随机生成浮点数。

    编程收获:最初选用java做整体开发,可是发现后面功能越大,java越难完成整个程序功能,后来改选用Python。一开始同学建议用Python,我其实比较抵触,因为我这门语言不是特别熟练。而且这周任务比较重,自己能力又有限,怕用python有阻碍,可是越到后面功能java越难完成,所以就尝试着使用python,我相信语言都是相通的。突然发现python真的好强大,语言简洁,功能齐全强大,基本都是调用函数就可以了,不需要自己写太多方法。

    功能二. 支持括号

    老师看了你的表演,大大赞赏了你。然后她说,"你的题库里怎么都是没有括号的题呢,我记得你当初括号就掌握得不好啊。"你的脸红了,对老师说,"给我2个小时时间,我给你一个新版本,有括号的。完成这个功能,老师对你的信任值+15.

    答:

    重点难点:括号的匹配问题是重点也是难点。并且,如何控制括号是随机出现也是难点。括号匹配,括号的位置很随意。一个表达式里可以先有括号,在数字运算符,也可以先有加减乘除,在有括号,括号也可以在中间。

    编程收获:在java中,括号匹配就要用到栈,后缀表达式等得出结果。而在python中不需要那么复杂,括号一共分为三种情况,左括号,右括号,没有括号,而不是两种情况。

    重要代码:

    def _f4(self):
            from random import randint as r  #直接导入randint函数,更名为r
            from random import uniform as ru  #直接导入uniform函数,更名为ru,用于生成指定范围内的随机浮点数
            from fractions import Fraction as f  #直接导入fractions函数,更名为f
            ops = ['+', '-', '*', '/']  #存储操作符
            kuohao = ['(', '', ')']  #存储括号
            left1 = r(0, 1)
            left2 = r(0, 1)
            left3 = r(0, 1)
            right1 = r(1, 2)
            right2 = r(1, 2)
            right3 = r(1, 2)
            if left1 == 0:
                left2 = 1
                left3 = 1
                if right1 == 2:
                    right2 = 1
                    right3 = 1
                else:
                    right2 = 2
                    right3 = 1
            else:
                if left2 == 0:
                    left3 = 1
                    right1 = 1
                    if right2 == 2:
                        right3 = 1
                    else:
                        right3 = 2
                else:
                    left3 = 0
                    right1 = 1
                    right2 = 1
                    right3 = 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)
            ops1 = r(0, 2)
            ops2 = r(0, 3)
            ops3 = r(0, 3)
            eq = kuohao[left1] + str(add_1) + ops[ops1] + kuohao[left2] + str(add_2) +kuohao[right1] + ops[ops2] + kuohao[left3] + str(add_3) + kuohao[right2] +  ops[ops3] + str(add_4) + kuohao[right3]
                  
            return (eq)
        for i in range(20):    
            _eq = f4()._f4()
            print(_eq, "=")
            _ans_right = f4()._f4_answer(eq = _eq)
            _ans = input("?")
            if _ans == _ans_right:
                print("答对啦,你真是个天才!")
                yes = yes+ 1
            else:
                print("再想想吧,答案似乎是", _ans_right, "喔!")
                no= no + 1
        print("你一共答对", yes, "道题,共20道题。")
    except:
        print("输入有误")
    return (0)

    功能3. 限定题目数量,"精美"打印输出,避免重复

    "就这点儿题,像你当年做得那么快,一会儿就完成啦!"老师说,"另外,我想打印出来,上课也不能带台机器。又另外,你把答案也打出来呗,我把答案剪掉,题目给学生做。"

    一看需求这么多,你生怕她会说,"这都是很简单的功能,你一定能完成吧"。你知道如果承诺今晚,明早交工的时候她一定想出了更多可怕的需求,你赶紧说,"老师我现在就做。"

    你忘记怎么调用打印机了,就把答案与题目横向对齐,输出在文件的右边。告诉老师txt文件可以用WORD打开,也能打印。她满意而意味深长地笑了,表示同意。

    >f4 -c 3
    1+2*(3+4)=                     15
    (1+2)*3+5=                     14
    ((1/2)-4)*5=                   17.5

    完成此功能,老师对你的信任值+10.

    答:

    重点难点:要判断用户输入的是否合法(题目量个数),随机生成用户所限定的题目的个数(正整数)。对输入的字符进行了是否正整数,是否是字符、小数、负数不合法情况进行判断。

    编程收获:由于有上面题目的基础,此题较简单,完成的很快。

    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) 

     

    功能4. 支持分数出题和运算

    国庆节后,你终于又回到美丽优雅并且正常的东北师范大学净月校区,在去食堂的路上偶遇你心目中的女神 (或男神,请自行替换)。她说,"哎呀,这跟我们《构建之法》课上的题目要求一样啊,真是巧合。"

    "不要客气,代码拿去!反正我也没用。"你说,"如果有需求变更或扩展,尽管找我。"

    你伏笔埋得不错。女神马上说,"对啊,有一点儿点儿不一样,你午饭时间加加班帮我改出来吧。"

    她的题目还要求支持分数运算,你不禁想到了功能1中你特意规避了一些题目不出。她想要的是下面的样子:

    >f4 -c 3
    1/3+2/3+1+1=                   3
    1/2+2/3+1+2=                   4 1/6
    7/5+3/4*2-3                    -1/10

    (在你的心中,女神的要求并不像昔日的老师那么重要。此题选作,不完成此题不倒扣分。)

    答:

     重点难点:随机生成数时要考虑到分数运算分母不为零的情况,在做分数四则运算时要要考虑将整数转化成分数进行计算。同时也需要考虑括号匹配问题。

     编程收获:对分数的运算较困难,查询了Python的相关函数,使用起来很方便。

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

    答:

    1.编程语言选择:因为自己比较熟悉java,刚开始一起选择java语言,后来java实现较困难,后选择python实现。

    2.代码规范:python中代码要求规范,和java不太一样,需要调整;两个人代码风格不同,需要一致调整。

    3.代码争论:在实现功能时,两个人观点不太一致,引起一些争论,浪费时间。

    4.代码合作:和队友合作,可以一并解决遇到的问题。

    5.代码复审:两个人对代码都进行复审,从不同的角度,更能发现问题。

    要求2 给出结对开发的截图证据,要求截图能够证明你们是在结对编程。 (5分)

     

    要求3 代码地址:https://e.coding.net/zhangbj/f4/f4.git

  • 相关阅读:
    000-ESP32学习开发(SDK)-ESP32开发板使用说明
    2-STM32 替换说明-CKS32, HK32, MM32, APM32, CH32, GD32, BLM32, AT32(推荐), N32, HC华大系列
    002-CH579M学习开发-官方资料学习说明,开发板蓝牙(蓝牙定位),网口通信测试
    001-CH579M学习开发-硬件使用说明,下载和运行第一个程序
    STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-硬件使用说明
    17-网络芯片CH395Q学习开发-片内EEPROM读写实验
    16-网络芯片CH395Q学习开发-低功耗实验
    15-网络芯片CH395Q学习开发-DNS 域名解析
    14-1-网络芯片CH395Q学习开发-WEB服务器-网页到底是啥, web服务器是啥, 网页如何显示的显示图片和视频
    13-网络芯片CH395Q学习开发-模块使用Socket0作为MAC RAW
  • 原文地址:https://www.cnblogs.com/ZhangBingjie/p/13772968.html
Copyright © 2020-2023  润新知