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运行过程中编译失败,找语法错误。

 

转载于:https://www.cnblogs.com/yangjm137/p/9753628.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值