zoukankan      html  css  js  c++  java
  • 20200924-5 四则运算试题生成,结对

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

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

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

    结对编程伙伴:袁艳春

    开发环境 Windows10 (全程使用季嘉同学笔记本开发)

    开发工具是 pycharm

    版本控制:Git

    Coding:https://e.coding.net/a123098/test4/py.git

    功能1. 四则运算

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

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

    你在老师面前作如下表演 (数字你用excel验算过了,UI的卖萌部分你还没有想好) 。

    重难点:

    如何随机的生成式子,采取的方法用python里面的random函数去处理;如何将计算结果产生的是小数如何转化为分数,采用python里面带的Fraction函数函数

    关键代码:

    def _equations():    #功能一生成随机式子
            ops = ['+', '-', '*', '/']
            n1 = r(1, 9)      #产生随机数
            n2 = r(1, 9)
            n3 = r(1, 9)
            n4 = r(1, 9)
            o1 = r(0, 2)
            o2 = r(0, 3)
            o3 = r(0, 3)
            equa = str(n1) + ops[o1] + str(n2) + 
             ops[o2] + str(n3) + 
             ops[o3] + str(n4)
            return (equa)

    运行截图:

    功能2. 支持括号

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

    你拿出笔记本,偷偷微信你们《构建之法》班的学霸,她说肯定能行,但是细节信号不好你听不清,只捕捉到隐约几个词"逆波兰""后缀表达式""堆栈""我看好你""数据结构"。

    两小时后,在老师面前你在控制台下输入f4,然后回车。

    重点难点:

    对于括号的处理,划分括号的位置,采取的方式是借助python里面的词典进行处理问题。本来想试一下数据结构中的知识,栈,将中缀表达式转化为后缀表达式,但水平不够,没有实现这个功能。

     代码:

    def _formula():  # 生成随机式子
        ops = ['+', '-', '*', '/']
        n1 = r(1, 9)  # 产生随机数
        n2 = r(1, 9)
        n3 = r(1, 9)
        n4 = r(1, 9)
        o1 = r(0, 2)
        o2 = r(0, 3)
        o3 = r(0, 3)
        dic = {
            0: '(' + str(n1) + ops[o1] + '(' + str(n2) + ops[o2] + str(n3) + ')' + ')' + ops[o3] + str(n4),
            1: '(' + str(n1) + ops[o1] + str(n2) + ')' + ops[o2] + str(n3) + ops[o3] + str(n4),
            2: str(n1) + ops[o1] + str(n2) + ops[o2] + '(' + str(n3) + ops[o3] + str(n4) + ')',
            3: str(n1) + ops[o1] + '(' + '(' + str(n2) + ops[o2] + str(n3) + ')' + ops[o3] + str(n4) + ')',
            4: '(' + '(' + str(n1) + ops[o1] + str(n2) + ')' + ops[o2] + str(n3) + ')' + ops[o3] + str(n4),
            5: str(n1) + ops[o1] + '(' + str(n2) + ops[o2] + '(' + str(n3) + ops[o3] + str(n4) + ')' + ')',
            6: str(n1) + ops[o1] + '(' + str(n2) + ops[o2] + str(n3) + ops[o3] + str(n4) + ')',
            7: '(' + str(n1) + ops[o1] + str(n2) + ops[o2] + str(n3) + ')' + ops[o3] + str(n4),
            8: '(' + str(n1) + ops[o1] + str(n2) + ')' + ops[o2] + '(' + str(n3) + ops[o3] + str(n4) + ')',
            9: str(n1) + ops[o1] + '(' + str(n2) + ops[o2] + str(n3) + ')' + ops[o3] + str(n4), }
        test = r(0, 9)
        eqa = dic[test]
        return (eqa)

    运行截图:

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

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

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

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

    你输入命令执行的时候,脑袋比手指头还疼。

    重点难点:

    掌握了rjust()函数,学会了python中对文件的输入输出

    代码:

    def input_count(n):
              try:
                n = int(n)
                if n >= 0:
                    data = open("result.txt", 'w+')
                    for i in range(n):
                        eqa = _formula()
                        result_right = run_count(eqa)
                        eqa = eqa + "="
                        print(eqa.ljust(40), result_right,file=data)
                    data.close()
                else:
                    print('题目的数量必须是 正整数')
              except:
                  print('题目的数量必须是 正整数')
              return(0)

    运行截图:

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

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

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

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

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

    重点:

    对于分数的处理,用了Fraction()函数,比较方便

    代码:

    def run_count(eq):           #计算式子值函数
        result = f(eval(eq)).limit_denominator(1000)   #利用eval函数计算式子的值
        result = str(result)
        return(result)

    运行截图:

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

         通过这次的结对编程作业,我明白了团队协作的重要性,两个人相互督促,互相治疗对方的拖延症,共同完成作业。我们两个人合作非常愉快,使我的能力得到了进一步的提高。在过程中,我们遇到过很多的困难,通过查阅资料,互相讨论商量学习,完成此次作业。

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

    花费时间比较长的事件:

        (1)功能一中,python中random的使用,查找资料花费不少时间

        (2)如何将产生的式子进行计算,通过咨询其他同学了解了python中的eval()函数。

        (3)对于括号的处理,又去学习了数据结构中的中缀表达式和后缀表达式,花费时间较长,但最终未能实现

        (4)括号运算,掌握了python中的字典

        (5)修改代码中不规范的命名

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

     由于疫情原因,采取线上合作的模式,证明材料:

     

    要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(25分)

     Coding:https://e.coding.net/a123098/test3/test3.git

  • 相关阅读:
    20151019
    20151013
    20150810
    20150626
    20150625
    20150530
    HTML特殊字符大全
    label标签跳出循环
    IIS 负载均衡
    .NET代码执行效率优化
  • 原文地址:https://www.cnblogs.com/jia123/p/13766236.html
Copyright © 2011-2022 走看看