作业要求 20180925-6 四则运算试题生成

本作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2148

代码地址:https://git.coding.net/lew666/sizeyunsuan.git

其中f4.py为功能1代码,f5.py为改进后功能4的代码

要求一:

1.重点

这周开始了结对编程,因为我和张宇是室友,所以我俩选择一起结对完成这周的任务,一开始我俩对待这个题目的时候首先是确定编程语言,因为我会的语言是C,张宇对C很久没有看了,他假期学习了python,我也学了一些python,觉得python比较方便,所以我俩选择了用python去实现这次作业。在确定语言之后我们首先确定完成这个作业需要的方法,和模块。我们查阅了很多资料,学习其中的方法,模块的知识。

首先需要随机生成四则运算,就需要随机生成数来进行运算。首先要引入random模块。

random.randint()函数用于生成一个指定范围内的整数,random.randint(a,b)参数a,b之中,a是上限,b是下限,如果a>b,则生成随机数成功,生成的随机数n的大小为a<=n<=b。

其次我们要处理分数,所以需要导入fractions模块。最后我们还要调用字符串进行操作,所以导入了string模块。

导入模块代码为:

import random
import fractions
import string

通过random.randint(a,b)函数,随机生成四个数字。

代码为:

first_num=random.randint(2,10)
second_num=random.randint(2,10)
third_num=random.randint(2,10)
fourth_num=random.randint(2,10)

随机数生成之后,就需要生成运算符,通过调用random.choice()函数。

choice() 方法返回一个列表,元组或字符串的随机项。语法为random.choice( seq ),参数seq可以是一个列表,元组或字符串。因为返回值为随机项,所以正好我们可以返回随机的字符。我们将随机生成的运算符赋值给变量a。

代码如下:

a = random.choice("+-*/")

接下来生成运算式,进行加减乘除的组成运算,然后将计算结果赋值给变量faker,为输入结果时与之作比较做准备。

代码如下:

if second_num==1:
        x=first_num
    else:
        x=fractions.Fraction(first_num,second_num) 
    if fourth_num==1:
        y=second_num
    else:
        assert isinstance(fourth_num, object)
        y=fractions.Fraction(second_num,fourth_num)
    if a=="+":
        result=float(x+y)
        faker = result
        print(x,a,y,"=")
    elif a=="-":
        result=float(x-y)
        faker = result
        print(x,a,y,"=")
    elif a=="*":
        result=float(x*y)
        faker = result
        print(x,"x",y,"=")
    elif a=="/":
        result=float(x/y)
        faker = result
        print(x,"÷",y,"=")
    
    print("?")

当用户看到运算式进行计算,将计算的结果手动输入。

代码如下:

answer=float(input())

当输入计算结果后,此时接收到计算结果之后就要判断结果的对错,将用户手动输入的答案与赋值后的运算结果的变量Faker进行比较,如果相等就对,如果错误就弹出再想想吧。我们要统计用户答题正确的个数,将正确的个数赋值给变量temp,进行累加,如果答错了,统计答题总数的变量i累加,但是无论答对答错,变量i都会累加,因为它是统计题目的总数。

代码如下:

if faker == answer:         # 正确
        temp=temp+1
        print("答对啦,你真是个天才!")
    else:                         # 错误
        print('再想想吧.答案似乎是 %s' % result)
    i += 1

最后输出对的个数和总题数。

代码如下:

print("你一共答对%d道题" % temp)
print("共%d道题" % n)

功能实现截图:

功能1:

功能4:

 

2.难点

功能1:如何生成随机数?在功能一中导入了random的模块,上网查阅了相关的资料学会了如何生成随机数。四则运算如何生成随机的运算符号?这也是一个难点,我们通过choice() 方法进行随机提取字符。

功能2:功能2我和张宇讨论的时候想到了用二叉树或者堆栈去存储,然后遇到括号进行匹配。将每个运算符存入其中,如果碰到括号,就等待着与下一个括号进行匹配,然后先对括号里的运算式进行计算。在网络查阅了很多资料,但还是没有实现。

功能3:如何打印出来?我想到了用open函数创建一个输出文件然后用打开方法在里面打印,没有实现。

3.本次编程收获

编程能力重在实践,而我在实践之中也完成了对代码的练习,熟练了一些python的模块,学习了一些新的函数方法,我觉得python的模块特别好用,此次作业提高了我的代码能力,让我对python进行了学习与实践,在第一次结对编程中,我们有歧义也有共同的点,遇到问题我们要协商执行共同的观点与做法,合作是一个互相锻炼并约束的一个锻炼机会,让我受益匪浅。

4.结对编程的心得体会

在结对编程中,

首先,我体会到的是约束,约束既能体现到监督作用,也能起到促进学习作用。如果你的伙伴不跟你一起去学习,考虑问题,发表观点,那么你就会拖垮团队,所以两个人对待一个项目的时候首先要互相监督,互相学习,面对问题从不同的角度去思考并且统一观点。

其次,我们要适应共同提出的代码规范,更改自己的习惯,这是一个很难的事情,更改自己的习惯有好有坏,但利于共同的项目发展的就是对于项目来说是好的。

在这次结对编程中我觉得最重要的就是磨练心智与情绪,控制情绪,寻找共同的观点,否定错误的观点,如果情绪控制不好的话两个人就会谈崩。实际编程中我们总会有不同的观点,比如我操作的时候可能有那个语法出现了低级错误,张宇发现了就比较着急,我就很着急,这时候一定要稳定下来,张宇的python的基础比我好,我一开始很慌,我就不断地看书学习内容,实际中我们懂得都差不多,也让我信心大增。

最后,虽然两个人遇到了很多难题,我们还是共同去学习,去改进,虽然有很多不足,但是在此次实践中,我学习到了他对待问题的思考方式以及对待问题的严谨处理办法,我提醒张宇,张宇提醒我,大大的提高了编程效率,两个人的合作也促进了执行力的鼓励与进步,这次合作让我进步很多,并且在实践中体会,我觉得环境很重要,环境可以影响一个人,使之进步。

5.在结对编程中的争论,复审和收获

(1)在语言的选择方向出现了较大的分歧,在两个人的理解和对待题目的分析后,我们最终决定用python去实现此次程序。

       我的收获是无论两个人的起点如何,应该优先选择最适合项目的,并且两个人要对于问题有观点,所以语言要选择水平差不多的。

(2)在编程时,我和张宇发现在实现运算式时,是一个很大的难点,问了很多同学,上网查阅了很多资料,最后将程序实现了。

       我的收获是发现问题不可怕,要学会如何有应对方案快速的解决,学习也是互相你追我赶的监督,这使我们学到了很多知识。

(3)在分析程序时,互相理解错了对方的意思,导致大量的时间被浪费,敲了很多无用的代码。

       我的收获是不要急于去完成事情,首先要确定分步,其次不要着急,一定要理解合作伙伴的观点和想法,达到认同的时候通过步骤分解去执行完成。

(4)在输出时,功能1的spec有个符号“?” ,在提交第一次代码的时候都没有发现,最后在更新代码的时候被排查出来。

       我的收获是往往微小的细节我们疏忽,这也是行为工作中最低级的错误,往往大家都觉得很简单,却疏忽了让整个功能崩盘的格式。

(5)因为使用的时python需要将后缀名为.py的程序,转换成.exe,这个过程回想起来,心累啊。我按照步骤去操作,结果文件更改失败,我查找了许多解决方法,解决了我电脑环境的问题,谁知道一转换就变成了病毒,电脑杀毒软件自动清除了,每次改进后转换都要从病毒隔离区恢复。导致说我电脑出现了20多个病毒。

       我的收获是一定要耐心,控制情绪,要学会向电脑说加油,干!

要求二:

工作地点:东北师范大学冬华公寓B604(我和张宇一个寝室)。

原文地址:https://www.cnblogs.com/luditong/p/9752095.html