zoukankan      html  css  js  c++  java
  • 20190919-6 四则运算试题生成,结对

    作业要求详情:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7631

    结对成员:彭思雨

    要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,博客是分别完成的)。

    (1) 给出每个功能的重点、难点、编程收获。

    功能一:

    重点:除数为零以及分数除不尽问题。

    难点:一开始写程序主要考虑除数不能为零,可是题目又要求是生成随机数,这点我和我队友不知道怎么处理。

    编程收获:第一次使用的java,可是发现后面功能越大,java越难完成整个程序功能。后来改选用Python。一开始我队友建议用Python,我其实比较抵触,因为我没有学过这门语言,在暑假只是稍微了解一点。而且这周任务比较重,自己能力又有限,所以不像去接触一门新的语言,可是越到后面后面功能java越难完成,所以就尝试着学习python,我相信语言都是相通的。突然发现python真的好强大,语言简洁,功能齐全强大,基本都是调用函数就可以了,不需要自己写方法,这次逼着自己学习一门新语言,虽然现在还不太熟悉,可是总算开启学习python之路,。

    功能二:

    重点:判断括号匹配。

    难点:括号匹配好好几种,先一个表达式里可以先有括号,在数字运算符,也可以先有加减乘除,在有括号,括号也可以在中间。

    编程收获:此次代码是参考往届学长的,我们这个括号匹配不好,参考学长代码,感觉学长的代码简洁易懂,要是在java中,括号匹配就要用到栈,后缀表达式得出结果,而在python中不需要那么复杂,括号一共分为三种情况,左括号,右括号,还有就是没有括号,而不是两种情况,一开始就是想的两种情况,但是表达式有的不合理。收获到了,原来括号不能只有两种。

    def _f4(self):
            from random import randint as r  #直接导入randint函数,更名为r
            from random import uniform as ru  #直接导入uniform函数,更名为ru,用于生成指定范围内的随机浮点数
            from fractions import Fraction as f  #直接导入fractions函数,更名为f
            ops = ['+', '-', '*', '/']  #存储操作符
            kuohao = ['(', '', ')']  #存储括号
            left1 = r(0, 1)
            left2 = r(0, 1)
            left3 = r(0, 1)
            right1 = r(1, 2)
            right2 = r(1, 2)
            right3 = r(1, 2)
            if left1 == 0:
                left2 = 1
                left3 = 1
                if right1 == 2:
                    right2 = 1
                    right3 = 1
                else:
                    right2 = 2
                    right3 = 1
            else:
                if left2 == 0:
                    left3 = 1
                    right1 = 1
                    if right2 == 2:
                        right3 = 1
                    else:
                        right3 = 2
                else:
                    left3 = 0
                    right1 = 1
                    right2 = 1
                    right3 = 2
            add_1 = ru(0, 1)
            add_1 = f(add_1).limit_denominator(10)#限制最大分母值,小数变分数
            add_2 = ru(0, 1)
            add_2 = f(add_2).limit_denominator(10)
            add_3 = r(1, 10)
            add_4 = r(1, 10)
            ops1 = r(0, 2)
            ops2 = r(0, 3)
            ops3 = r(0, 3)
            eq = kuohao[left1] + str(add_1) + ops[ops1] + kuohao[left2] + str(add_2) +kuohao[right1] + ops[ops2] + kuohao[left3] + str(add_3) + kuohao[right2] +  ops[ops3] + str(add_4) + kuohao[right3]
                 
            return (eq)
    

      

                for i in range(20):     #输出20道题,分别判断输入结果与正确答案是否相同,按要求输出
                    _eq = f4()._f4()
                    print(_eq, "=")
                    _ans_right = f4()._f4_answer(eq = _eq) 
                    _ans = input("?")
                    if _ans == _ans_right:
                        print("答对啦,你真是个天才!")
                        yes = yes+ 1
                    else:
                        print("再想想吧,答案似乎是", _ans_right, "喔!")
                        no= no + 1
                print("你一共答对", yes, "道题,共20道题。")
            except:
                print("输入有误")
            return (0)
    

      

     

    功能三:

    重点:输入字符是否合法判断。

    难点:输入字符是否合法这分好几种情况,因为情况较多,所以考虑不全成为一个难点。

    编程收获:我们对输入的字符进行了是否正整数,是否是字符、小数、负数不合法情况进行判断。

    功能四:

    重点:支持分数出题和运算。

    难点:支持分数运算。

    编程收获:对分数运算,这个是在第一个功能的基础上修改的,学到了可以直接在自己定义的变量后面点方法。

    def _f4_integer_parser(self,x):
            _p = "题目数量必须是  正整数。"
            try:
                x = int(x)
                if x >= 0:
                    for i in range(x):
                        _eq = f4()._f4()
                        _right = f4()._f4_answer(eq = _eq)
                        _eq = _eq + "="
                        print(_eq.ljust(40), _right)#方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
                else:
                    print(_p)
            except:
                print(_p)
            return(0) 

     

    (2)给出结对编程的体会。

    在结对编程前,我已经知道会有结对编程,一开始特别期待,可是后期天气变凉,我的热情也随着天气变淡了,在本次编程中,前几天,我和我的队友都是自己先想自己的,在构思,想着等想好在讨论,可是两天过去了,发现一点进展都没有,后来周六我和队友一起去食堂,一起讨论,一个上午把构思撸清楚,然后我们采用java来编程,上午过去了,真的发现两个人在一起,比一个人在一起效率高,因为一个人遇到问题,很难发现自己的问题在那里,而且好多细节都发现不了,自己编程代码错误率非常高,可是有队友可以降低代码错误率。而且在遇到自己掌握不太好的知识,而队友这块好,可以互补。而且自己平时写代码是写给自己看的,代码也不规范,可是有队友,就要尽量把代码写的让队友可以看懂,队友也会提出自己代码不规范,以后自己就会注意到这点,在以后的代码编程里,会更加严格要求自己,在这里,非常感觉杨老师,给了我这次机会,让我可以知道自己的不足,也非常感谢队友,纠正我的错误,同时我也意识到了自己编程能力差,还需要多多练习,虽然在结对作业中,我们有过争论,有个不愉快,但最终我们把整个工作一起做完,发现在工作的争执都是不可避免的,但是这也是一种成长。

    (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)

    1.编程语言选择:

    一开始我主张用java,因为c太麻烦,我对python不熟悉,而队友主张用C,因为她java不太熟悉,在一番争执,我们做了功能分析,一开始都C和java都可以,但是在分析到第三个功能,我们俩就感觉难度越来越大,班里的同学建议用python,我们最终选择了Python.

    2.括号匹配:

    本来要用java的,可是在括号匹配这里,由于栈这块知识以及忘得差不多,所以放弃了。然后我们在网上搜索资料,正好看到有往届学长得代码,用0、1、2代替左括号,没有括号,右括号这三种情况,但是这块代码不多,理解起来还是比较困难得。

    3.代码改善:

    在第一个功能完成后,我们就在改善功能,一直在调bug ,总是会有好多Bug,各种问题,一个标点找了好好时间。

    4.除数为0情况:

    一开始没有考虑除数为零情况,所以运行总是有错误,这个问题真得不知道怎么办,除数不可以为零但是被除数可以为零,最后发现python 中可以限定随机数范围。

    5.调用函数:

    因为不熟悉Python,所以一开始看了好多Python函数,在代码中调用函数,都是一边编程一边查函数,这个时间也是非常耗时的。

     6代码规范:

    因为Python和其他语言还不太一样,在编写代码时,总是在一行语句完成时多加一个分号,在定义新的变量时,也是经常给出类型,看来这原有的习惯需要多注意。

    要求2 给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。 (5分)

    编程地点:一食堂二楼。

    计算机:杨萍电脑。

    可选项:学习区。

     

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

    源代码地址:https://e.coding.net/SpringSun/sizeyunsuan.git

  • 相关阅读:
    JS函数浅析(一)
    H5_canvas与svg
    h5+js视频播放器控件
    【BZOJ3622】已经没有什么好害怕的了
    【9.29 模拟】T3 小清新最优化(easy)
    9.27模拟
    9.26 模拟
    4062 -- 【清华集训2012】串珠子
    【SNOI2017】炸弹
    P3216 [HNOI2011]数学作业
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/11575047.html
Copyright © 2011-2022 走看看