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(我和张宇一个寝室)。

  • 相关阅读:
    LeetCode 1245. Tree Diameter
    LeetCode 1152. Analyze User Website Visit Pattern
    LeetCode 1223. Dice Roll Simulation
    LeetCode 912. Sort an Array
    LeetCode 993. Cousins in Binary Tree
    LeetCode 1047. Remove All Adjacent Duplicates In String
    LeetCode 390. Elimination Game
    LeetCode 1209. Remove All Adjacent Duplicates in String II
    LeetCode 797. All Paths From Source to Target
    LeetCode 1029. Two City Scheduling
  • 原文地址:https://www.cnblogs.com/luditong/p/9752095.html
Copyright © 2011-2022 走看看