• 宫立秋20200924-5 四则运算试题生成,结对


    此作业要求参见https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11245

    结对伙伴:吴艳丽

    功能1. 四则运算

    支持出题4个数的四则运算题目,所有题目要求作者有能力正确回答 (提示:1/3 != 0.33333333333333333333333333333333,而是无限长)。

    重点,难点:对随机生成的数进行运算,在计算结果和接收到的答案之间要用str进行转换,否则匹配不成功

    代码:

     1 #产生四则运算表达式
     2 def ques():
     3     brackets = ['(','',')']
     4     operators = ['+','-','*','/']
     5     #随机产生运算符
     6     i1 = random.randint(0,2)
     7     i2 = random.randint(0,3)
     8     i3 = random.randint(0,3)
     9     #随机产生四个数
    10     number1 = random.uniform(0,1)
    11     number1 = Fraction(number1).limit_denominator(10)
    12     number2 = random.uniform(0,1)
    13     number2 = Fraction(number2).limit_denominator(10)
    14     number3 = random.randint(1,10)
    15     number4 = random.randint(1,10)
    16 def result():
    17     total = 0
    18     for i in range(20):
    19         question = ques()
    20         print(question)
    21         res = eval(question)
    22         ans = input("? ")
    23         if str(res) == str(ans):
    24             print("答对啦,你真是个天才!")
    25             total += 1
    26         else:
    27             print("再想想吧,答案似乎是%f" %res)
    28     print("一共答对" + str(total) + "道题," + "共20道题!")

    运行效果图:

    功能2. 支持括号

    重点,难点:括号的几种形式以及如何表达想了好久,后来我们两个参考往届的学姐的程序,最终理解并完成程序,在括号匹配要注意逻辑问题。

    代码:

     1     #随机产生左括号
     2     left1 = random.randint(0,1)
     3     left2 = random.randint(0,1)
     4     left3 = random.randint(0,1)
     5     #随机产生右括号
     6     right1 = random.randint(1,2)
     7     right2 = random.randint(1,2)
     8     right3 = random.randint(1,2)
     9     #括号匹配
    10     if left1 == 0:
    11         left2 = 1
    12         left3 = 1
    13         if right1 == 2:
    14             right2 = 1
    15             right3 = 1
    16         else:
    17             right2 = 2
    18             right3 = 1
    19     else:
    20         if left2 == 0:
    21             left3 = 1
    22             right1 = 1
    23             if right2 == 2:
    24                 right3 = 1
    25             else:
    26                 right3 = 2
    27         else:
    28             left3 = 0
    29             right1 = 1
    30             right2 = 1
    31             right3 = 2
    32     ques = brackets[left1] + str(number1) + operators[i1] + brackets[left2] + str(number2)
    33     ques += brackets[right1] + operators[i2] + brackets[left3] + str(number3) + brackets[right2]
    34     ques += operators[i3] + str(number4) + brackets[right3]
    35     ques = str(ques)
    36     return ques

    运行效果图:

     

      

    功能3. 限定题目数量,"精美"打印输出,避免重复

    重点,难点:在格式输出上的表达方式查阅了很多资料,

     代码:

     1 def command_input(num):
     2     data = open('data.txt','w+')
     3     if num.isdigit():
     4         for i in range(int(num)):
     5             question = ques()
     6             question1 = question + '='
     7             res = Fraction(eval(question)).limit_denominator(100000)
     8             print('{:<50}{:<25}'.format(question1,traversal_dist(str(res))))
     9             print('{:<50}{:<25}'.format(question1,traversal_dist(str(res))),file = data)
    10     else:
    11         print("题目数量必须是正整数。")

     运行效果图:

      功能4. 支持分数出题和运算:

    重点,难点十进制的表示,以及遍历分数的时候判断符号和除号要进行标记。

    代码:

     1 #将分子分母转换为十进制数
     2 def take_decimalism(dicts = {}):
     3     j= len(dicts)-1
     4     sum1 = 0
     5     for i in range(0,len(dicts)):
     6         if j < 0:
     7             break
     8         sum1 = int(dicts[j]) * int(math.pow(10,i)) + sum1
     9         j = j-1
    10     return sum1        
    11     
    12 #遍历结果,将分子、分母存储到两个字典中并约分
    13 def traversal_dist(res):
    14     d1={}
    15     d2={}
    16     count1=0
    17     count2=0
    18     flag=0
    19     sign=0
    20     for i in res:
    21         if i=='-':
    22             sign=i
    23             continue
    24         if i=='/':
    25             flag=1
    26             continue
    27         if flag==0:
    28             d1[count1]=i
    29             count1=count1+1
    30         else:
    31             d2[count2]=i
    32             count2=count2+1
    33     #分子
    34     numerator = take_decimalism(d1)
    35     #分母
    36     denominator = take_decimalism(d2)
    37     if denominator == 0:
    38         return numerator
    39     else:
    40         w1=numerator // denominator
    41         w2=numerator % denominator
    42         answer=0
    43         if sign=='-':
    44             if w1==0:
    45                 answer=sign+str(w2)+"/"+str(denominator)
    46             else:
    47                 answer=sign+str(w1)+" " +str(numerator)+"/"+str(denominator)
    48         else:
    49             if w1==0:
    50                 answer=str(w2)+"/"+str(denominator)
    51             else:
    52                 answer=str(w1)+" " +str(numerator)+"/"+str(denominator)
    53         return answer

     运行效果图:

     要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,随笔有以下两种方式:(①允许两人写一份,得一份分数,二人均分;②如果每人写一份,内容不得抄袭,体会需要是自己的,分别得到自己博客的分数)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)

    1 我觉得结对编程要比单独编程好的多,因为在两个人思考问题的时候,会出现一些互补,而且在编程的过程中,吴艳丽同学很有行动力,会很督促我们的学习。

    2 我们在空格这里吃了很大的亏,反复推敲代码都觉得没有问题,但是就是显示无效的输入,后来花了大量的时间去改那个程序,有些甚至怀疑对的编码,得出体会要严格遵守编程规则。

    3 在括号匹配的时候,吴艳丽同学理解的比我要透彻,又重新缕了下思路,我们才继续进行。

    4 由于python有些语法,函数不是很熟悉,在编写代码的过程在网上查阅了很多。我们一起研究,一起讨论一步一步实现每一个功能。

    5 在分子分母转化为十进制我们这里讨论了很久,用math.pow 进行表示,对下标的开始也是有分歧的,最终决定从后往前遍历,这样在表示时更加方便。

    要求2 给出结对开发的截图证据,要求截图能够证明你们是在结对编程。 (5分)

     

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

    git 地址:https://github.com/amancer34/calculate.git

  • 相关阅读:
    [引]ASP.NET MVC 4 Content Map
    [转]ASP.NET MVC 2: Model Validation
    [转]ASP.NET MVC中你必须知道的13个扩展点
    [转]Best way to sort a DropDownList in MVC3 / Razor using helper method
    [转]Sql Server参数化查询之where in和like实现详解
    [转]Oracle Stored Procedures Hello World Examples
    [转]oracle的ANYDATA数据类型
    重构中对设计模式的反思
    poj2186 Popular Cows --- 强连通
    mac下通过xcodebuild使用oclint
  • 原文地址:https://www.cnblogs.com/gongbaby/p/13772815.html
Copyright © 2020-2023  润新知