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


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

    结对伙伴:王艳鹤

    功能1. 四则运算

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

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

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

    功能2. 支持括号

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

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

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

    功能重难点如何随机生成四则表达式,如何利用堆栈来求解表达式的值。

    生成表达式代码如下:

    def create_formula():
        equation = []
    
        for i in range(3):
            equation.append(random.randint(0, 10))
            equation.append(operator[random.randint(0, 3)])
        equation.append(random.randint(0, 10))
        p = random.randint(1, 5)
        if p is 1:
            equation.insert(0, "(")
            equation.insert(4, ")")
        elif p is 2:
            equation.insert(0, "(")
            equation.insert(6, ")")
        elif p is 3:
            equation.insert(2, "(")
            equation.insert(6, ")")
        elif p is 4:
            equation.insert(2, "(")
            equation.append(")")
        elif p is 5:
            equation.insert(4, "(")
            equation.append(")")
        return equation

     怎么将中缀表达式转化为逆波兰表达式代码如下:

    def reverse_polish(equation):
        result = []
        c = []
        slist = [i for i in equation]
    
        for item in slist:
            if item in range(0, 100):
                result.append(item)
            elif not c and item in operator_dic.keys():
                c.append(item)
                continue
            elif c and item in operator_dic.keys():
                for x in range(c.__len__()):
                    z = c[-1]
                    temp = operator_dic[z] if z in operator_dic else cal1[z]
                    if temp >= operator_dic[item]:
                        result.append(c.pop())
                    else:
                        c.append(item)
                        break
                if not c:
                    c.append(item)
            elif item is ")":
                for x in range(c.__len__()):
                    if c[-1] == "(":
                        c.pop()
                        break
                    else:
                        result.append(c.pop())
            elif item is "(":
                c.append(item)
        for x in range(c.__len__()):
            result.append(c.pop())
        return result

    如何计算逆波兰表达式代码如下:

    def calculate(re_equation):
        stack = Stack()
        sumEnd = 0
    
        if len(re_equation) is 0:
            return sumEnd
        for i in re_equation:
            if i in range(0, 100):
                stack.push(float(i))
            elif '+' is i:
                a = stack.pop()
                b = stack.pop()
                stack.push(b + a)
            elif '-' is i:
                a = stack.pop()
                b = stack.pop()
                stack.push(b - a)
            elif '*' is i:
                a = stack.pop()
                b = stack.pop()
                stack.push(b * a)
            elif '÷' is i:
                a = stack.pop()
                b = stack.pop()
                if a == 0:
                    return False
                else:
                    stack.push(b / a)
        return stack.pop()

    测试截图:

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

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

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

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

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

    此功能难点在于对命令行参数的获取理解不够,做起来很费时费力。

    此功能运行结果如下

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

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

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

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

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

    此功能需要引用新的包,完成此功能学会了使用fraction函数的一些功能。

    关键函数使用如下

    from fractions import Fraction
    a = Fraction('3.1415926535897932').limit_denominator(1000)

    要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,随笔有以下两种方式:(①允许两人写一份,得一份分数,二人均分;②如果每人写一份,内容不得抄袭,体会需要是自己的,分别得到自己博客的分数)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)

    (1)具体回答见每个功能的实现

    (2)结对编程的体会:要对自己的小组保持足够的自信,需要有固定的合作编程的环境

    (3)a.要不要进行单元测试 b.追求完美还是完成 c.自己定义堆栈还是多找找看有没有现成的d.使用两台电脑还是一台电脑进行开发e.最大的收获就是又一次确认自己的编程能力亟需提高。

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

    要求3

    https://e.coding.net/wyh1/size/size.githttps://e.coding.net/wyh1/size/size.githttps://e.coding.net/wyh1/size/size.git

    https://e.coding.net/wyh1/size/size.githttps://e.coding.net/wyh1/size/size.githttps://e.coding.net/wyh1/size/size.githttps://e.coding.net/wyh1/size/size.githttps://e.coding.net/wyh1/size/size.git

     https://e.coding.net/wyh1/size/size.git

     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Struts2 helloWorld
    Python学习笔记基础汇总部分
    从控制台读入,典型的装饰者模式
    随机数产生方法小知识点
    Struts2基础知识
    面向对象原则之GOF是招式,九大原则才是精髓
    静态工厂方法
    单例模式singleton
    J2SE基础夯实系列之JDBC,链接数据库实例代码
    Ubuntu 12.04 下安装ssh 服务遇到的问题以及总结
  • 原文地址:https://www.cnblogs.com/lichao17/p/13775933.html
Copyright © 2020-2023  润新知