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

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

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

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

 要求一:

1.重点:

开始在选择编程语言方面不是很顺利的,卢帝同因为都觉得C有点难做,还是python比较方便,所以选择了用python去实现本次作业。在语言确定之后,我们两个花了大量的时间去查阅资料,因为python有很多现成的模块,可以很简单的实现某些功能,所以要对需要用到的模块进行查阅,最终选择了以下三个模块:

import random
import fractions
import string

  因为本次作业的要求是随机生成四则运算,所以生成随机数是必不可少的,因此可以使用python的random模块,我们调用的是其中random.randint(a, b)函数:

  random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

通过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()函数:

  random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。

通过random.choice()函数,随机生成运算符,并将运算符存到变量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())

  此时已经接收到计算结果,最后一步就是进行判断对错:

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

  如果正确则将正确的个数存在变量temp中,进行自增;无论结果对错,变量i作为存储题目总数的变量都进行自增运算。

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

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

  以上是功能1的主要程序,功能4的实现是通过将临时存储的变量强制类型转换成字符串类型,最后将结果输出,即得到功能4。

2.实现截图:

  功能1:

  功能4:

2.难点:

功能2和功能3在查阅大量资料后,还是无法在规定的时间内做出来,我个人对实现这功能2还是有一点,想法但是还是没有做出来:

功能2:应该是采用堆栈的存储方法,将每个运算符存入堆栈中,如果碰到括号,就等待着与下一个括号进行匹配,然后先对括号里的运算式进行计算。

3.本次编程收获:

我觉得python语言重再积累,掌握的模块多少取决以后工作的强度,本周熟练掌握了用到的三个模块和算法,是我最大的收获;其次,第一次结对编程,让我体验到了合作的乐趣。

 4.结对编程的心得体会:

结对编程的好处在于:(1)起到督促的作用。这主要是因为有的时候如果一个人编程,可能会出现懈怠的情绪,而两个人共同编程会互相激励,起到促进作用。(2)有互相学习,共同提高的作用。在结对编程中,可以发现队友在编程中的很多好习惯以及心得,如果能够吸收这些东西为己用,便能够显著提高自己的编程水平。在我们得出设计思路,并将它们初次转化成代码后,编程之路其实才走了一小段。由于个人的疏忽,输入的错误,以及设计思路的偏差,往往会让我和卢帝同的程序陷入无止尽的BUG中,这会消耗我们大量的时间。而结对编程的好处就在于此。由于身边有个领航员角色的存在,在编写代码时,一旦出现输入错误,就会有人及时的提醒。并且,在设计代码时,有个同伴可以一起讨论,融合两个人不同的见解和观点,我们往往可以得出更加准确且更加高效的设计思路。因为结对编程可以很大程度上提高编程效率,而且两人轮流编程,不会太过疲惫。我十分乐于进行结对编程,因为这会极大的改善我们的编程体验,使编程不再那么枯燥。

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

(1)开始在语言的选择方向出现了较大的分歧,但是通过查阅资料,我最终决定还是使用python去实现此次程序;

(2)在编程时,我和卢帝同发现在实现运算式时,是一个很大的难点,问了很多同学,上网查阅了很多资料,最后将程序实现了,在这点最大的收获是,结对编程能起到督促作用;

(3)在分析程序时,互相理解错了对方的意思,导致大量的时间被浪费,敲了很多无用的代码,通过这次结对编程,掌握了基本的技巧,还有要提高自己的表达能力;

(4)在输出时,功能1的spec有个符号“?” ,在提交第一次代码的时候都没有发现,最后在更新代码的时候被排查出来,说明两个人结对编程不能太过于依赖对方,要更加仔细认真的去做;

(5)因为使用的时python需要将后缀名为.py的程序,转换成.exe,在这个过程中,历经坎坷,碰到很多次由于电脑环境问题导致无法转换成功,通过查阅资料,最终实现了这个功能。

要求二:

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

猜你喜欢

转载自www.cnblogs.com/zy1122/p/9747582.html