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

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

结对伙伴:李超

功能1. 四则运算

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

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

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

> f4
1+2*3+4=
?11
答对啦,你真是个天才!
1+2*3+5=
?11
再想想吧,答案似乎是12喔!
1+2/4-5=
?-3.5
答对啦,你真是个天才!
...(一共20道题)

你一共答对4道题,共20道题。

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

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

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

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

 

 

功能二题目:

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

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

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

 

 运行代码如下:

def function1():
    right = 0
    i = 0

    while i in range(20):
        i = i + 1
        equation = create_formula()
        re_equation = reverse_polish(equation)
        result = calculate(re_equation)
        answer0 = result
        if result is False or result is None or len(str(result)) > 12:
            i = i - 1
            continue
        str_equation = " ".join('%s' % id for id in equation)
        print(str_equation + "=")
        print("?", end="")
        answer = float(input())
        if abs(result - int(result)) < 1.0e-16:
            result = int(result)
        if answer == answer0:
            print("答对啦,你真是个天才!")
            right = right + 1
        else:
            print("再想想吧,答案似乎是" + repr(result) + "喔!")
    print("你一共答对" + repr(right) + "道题,共20道题。")

运行结果如下:

 

 

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

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

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

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

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

 

 

 运行代码如下:

ef function3(n):
    n = int(n)
    i = 0

    while i in range(n):
        i = i+1
        equation = create_formula()
        re_equation = reverse_polish(equation)
        result = calculate(re_equation)
        if result is False or result is None or len(str(result)) > 12:
            i = i-1
            continue
        if i is 1:
            if os.path.exists('result.txt'):
                os.remove('result.txt')
        write_file(equation, result)

运行结果如下:

 

 

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

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

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

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

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

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

关键函数使用如下:

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

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

(1)功能一、二重点和难点:

重点:功能一和二的基本运行规则相似,所以放在一起说,首先在生成随机的题目之前需要定义好加减乘数的优先级,其次就是需要设立一个栈,为中缀表达式转后缀表达式做准备,然后的重点就是计算后缀表达式的这一步,需要判断表达式中的括号,如果有括号,需要先计算括号内的公式,然后才能继续计算后缀表达式。

难点:如何生成随机的表达式,还有在后面的计算后缀表达式都是难点。

收获:在编写这两个功能前,我查阅了很多类似CSDN这样的网站,学会了如何用python语言创建一栈,运用random类随机生成一个表达式。

功能三重点和难点:

重点:功能三的重点是如何在命令行读取命令行参数,同时还要判断所生成的题目的数量是否符合要求,对于小数和负数都输需要输出提示语句的,其次就是需要将生成的表达式写入到本地的txt文件中。

难点:怎么样将生成的表达式写入到本地的文件中是一个难点。

收获:通过查阅相关的网站等,学会了如何使用python语言生成一个文本文件,并且使用with open()将生成的随机公式写入到本地文件当中。

(2)结对编程的体会:这次编程我认识到了自己专业知识的不足,对于python的一些方法和类库还是不太熟悉,在编码的过程中我们都是在边写代码边查资料,感觉很慢。同时,我也认识到了多一个人编程的重要性,首先旁边的同学可以在看你编程的时候给你指出来一些编程上的缺陷,其次在遇到一个难点时不只是去自己查资料,还可以两个人一起讨论,集思广益。

(3)①讨论时间较长的功能包括上述的功能一二三的所讨论的重点和难点,但是最大的收获就是对于括号到底是怎么样生成,用什么方法生成进行了讨论。②用random生成,③用枚举生成,思前想后还是决定用随机类生成④是否用一台电脑⑤完成优先还是完美优先

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

 

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

代码地址: https://e.coding.net/wyh1/size/size.git

posted @ 2020-10-07 14:31  王艳鹤  阅读(119)  评论(2编辑  收藏  举报