• 20180925-6 四则运算试题生成


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

    本次代码地址:https://git.coding.net/y45777704/f4final.git

    其中f41文件夹,dist中f4.exe为功能1代码(原始功能)地址:https://coding.net/u/y45777704/p/f4final/git/tree/11/f41/dist

    f42文件夹,dist中f4为功能2代码(加括号功能)地址:https://coding.net/u/y45777704/p/f4final/git/tree/11/f42/dist

    f4final文件夹,dist中f4为功能3、4代码。地址:https://coding.net/u/y45777704/p/f4final/git/tree/11/f4final/dist

    功能1. 四则运算要求随机生成四则运算包括加减法。

    结对编程对象:杨磊

    功能:随机生成运算式。

    代码部分:定义函数f4,重点是用random随机生成数字,并把运算符赋值给operator1。

    class f4(object):
        def __init__(self):
            pass
        def _f4(self):
            from random import randint
            from random import uniform
            from fractions import Fraction
            operator1 = ['+', '-', '*', '/']

    #定义等式equal

            equal = str(a) + operator1[x]+ str(b)+ operator1[y] + str(c) + 
                 operator1[z] + str(d)

    #定义正确答案answer_right,用此变量对比输入(input),如果相等就证明答案正确,输出答对了;如果相比不相等则说明答案错误,输出:再想想吧,答案似乎是_。

    for i in range(20):
                    equal_1 = f4()._f4()
                    print(equal_1, "=")
                    answer_right = f4()._f4_answer(equal = equal_1)
                    _ans = input("?")
                    if _ans == answer_right:
                        print("答对啦,你真是个天才!")
                        m = m + 1
                    else:
                        print("再想想吧,答案似乎是", answer_right, "喔!")
                        n = n + 1
                print("你一共答对", m, "道题,一共20道题。")
    

    功能测试:

    功能: 加括号

    代码部分

    #在4个数字之间分别判断是否加入括号,定义left_1,left_2,left_3,right_1,right_2,right_3,共6个变量

            left_1 = randint(0, 1)
            left_2 = randint(0, 1)
            left_3 = randint(0, 1)
            right_1 = randint(1, 2)
            right_2 = randint(1, 2)
            right_3 = randint(1, 2)
            if left_1 == 0:
                left_2 = 1
                left_3 = 1
                if right_1 == 2:
                    right_2 = 1
                    right_3 = 1
                else:
                    right_2 = 2
                    right_3 = 1
            else:
                if left_2 == 0:
                    left_3 = 1
                    right_1 = 1
                    if right_2 == 2:
                        right_3 = 1
                    else:
                        right_3 = 2
                else:
                    left_3 = 0
                    right_1 = 1
                    right_2 = 1
                    right_3 = 2

    因此,表达式也更新为:

            equal = operator2[left_1] + str(a) + operator1[x] + operator2[left_2] + str(b) + 
                 operator2[right_1] + operator1[y] + operator2[left_3] + str(c) + operator2[right_2] + 
                 operator1[z] + str(d) + operator2[right_3]

    测试图片:

    功能:数量及打印txt

    代码:

    if __name__ == "__main__":
        import argparse
        parser = argparse.ArgumentParser()
        parser.add_argument("-c", "--cin")
        args = parser.parse_args()
        if args.cin == None:
            f4()._f4_input()
        else:
            f4()._f4_integer_parser(args.cin)

    测试结果

    功能:加分数 此方法借鉴了网上的其他大神的想法,就是随机生成浮点数,再用Python中limit_denominator(10)函数强制转换为分母不大于10的分数,代码:

            a = randint(1, 15)
            a = Fraction(a).limit_denominator(10)
            b = randint(1, 15)
            b = Fraction(b).limit_denominator(10)
            c = randint(1, 15)
            c = Fraction(c).limit_denominator(10)
            d = randint(1, 15)
            x = randint(0, 2)
            y = randint(0, 3)
            z = randint(0, 3)

     测试图片:

    编程体会:刚开始我们两个人对程序没有任何思路,只是想到把运算符赋值给变量,再生成等式在运算符中随机抽取,重点是找到了随机生成函数,于是开始展开编程工作。其中最大的难点在于括号的问题,刚开始在这个问题上面两个人的想法很不一样,杨磊是想用后缀表达式编写,但是这部分他尝试失败了,只能用我的笨方法——每生成一个数字之前都要判断是否出现括号。当然,结对编程最大的好处就是可以融合两个人的想法,从而实现优化程序的目的。反复争论及耗时的事件:1语言选择(C语言与Python的选择)2是否使用后缀表达式。3命令行参数处理。4借鉴他人方法实现分数功能。5运行过程中编译失败,找语法错误。

  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/yangjm137/p/9753628.html
Copyright © 2020-2023  润新知