zoukankan      html  css  js  c++  java
  • 作业要求 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(我和张宇一个寝室)。

  • 相关阅读:
    vijos1776:关押罪犯
    vijos1774:机器翻译
    vijos1775:乌龟棋
    vijos1792:摆花
    vijos1100:加分二叉树
    vijos1706:舞会
    单调栈
    bzoj1677:求和
    bzoj1340: [Baltic2007]Escape逃跑问题
    bzoj4716: 假摔
  • 原文地址:https://www.cnblogs.com/luditong/p/9752095.html
Copyright © 2011-2022 走看看