zoukankan      html  css  js  c++  java
  • 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运行过程中编译失败,找语法错误。

  • 相关阅读:
    字符串中去除连续相同的字符保留一个
    截取字符串中最后一个中文词语(MS SQL)
    WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive).
    Unexpected error from external database driver (1)
    RDLC报表显示存储于数据库的图片
    从angularjs传递参数至Web API
    angularjs呼叫Web API
    创建Web API并使用
    打印网页中某一段内容
    在angularjs实现一个时钟
  • 原文地址:https://www.cnblogs.com/yangjm137/p/9753628.html
Copyright © 2011-2022 走看看