zoukankan      html  css  js  c++  java
  • 自动生成小学四则运算

    Githubhttps://github.com/lieboyzz/1004/blob/master/%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%E5%B0%8F%E5%AD%A6%E5%9B%9B%E5%88%99%E8%BF%90%E7%AE%97

    PSP表格:

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    解题思路

     20

     25

    代码实现

     50

     70

    代码测试与代码优化

     30

     50

    测试改进程序性能上所花费的时间

     10

     5

    编写博客

     30

     20

    1.题目描述

    能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)

    2.解题思路

    语言:python

    目标:生成两项的四则运算式子

    过程:

    1.生成数字,生成四则符号

    2.连接数字与符号

    3.返回算术题和结果

    4.用一个列表存储结果,用一个列表储存算术题

    3.设计实现

    主函数:选择真分数四则运算还是整数四则运算

    fun1整数出题 fun2真分数出题

    3.注意点:使用random库随机生成0~100之间的整数或分数

    使用random库随机生成随机符号(+-*/)

    防止被除数是否为0

    使用max()min()函数防止生成小数

    使用list.append()储存算术题

    4.代码说明

    1.

    def zhengshu(q,ans):#整数出题
    
        sym = random.choice(['+','-','*','/'])
    
        n1 = random.randint(1,20)
    
        n2 = random.randint(1,20)
    
        if sym == '+':
    
            q.append(str(n1) + '+' + str(n2) + '=')
    
            ans.append(n1 + n2)
    
        elif sym == '-':
    
            bign,smalln = max(n1, n2), min(n1, n2)#防止出现负数
    
            q.append(str(bign) + '-' + str(smalln) + '=')
    
            ans.append(bign - smalln)
    
        elif sym == '*':
    
            q.append(str(n1) + '*' + str(n2) + '=')
    
            ans.append(n1 * n2)
    
        else:
    
            n1, n2 = max(n1, n2), min(n1, n2)
    
            q.append(str(n1) + '/' + str(n2) + '=')
    
            ans.append(n1 / n2)

    2.

    def createF(): #生成分数
    
        fz1 = random.randint(0, 20)
    
        if fz1 == 0:
    
            fm1 = random.randint(1, 20)
    
        else:
    
            fm1 = random.randint(1, 20)
    
        f1 = Fraction(fz1, fm1)
    
        fz2 = random.randint(1, 20)
    
        fm2 = random.randint(20, 20)
    
        f2 = Fraction(fz2, fm2)
    
        return f1, f2

    3.

    def fenshu(q,ans):    #两个分数的四则运算
    
        symbol = random.choice(['+','-','*','/'])
    
        f1,f2 = createF()
    
        if symbol =='+':
    
            while f1+f2>1:
    
                f1,f2 = createF()
    
            q.append(str(f1)+'+'+str(f2)+'=')
    
            ans.append(f1+f2)
    
        elif symbol =='-':
    
            f1,f2 = max(f1,f2),min(f1,f2)  #防止出现负数
    
            q.append(str(f1)+'-'+str(f2)+'=')
    
            ans.append(f1-f2)
    
        elif symbol == '*':
    
            while f1*f2>1:
    
                f1,f2 = createF()
    
            q.append(str(f1)+'×'+str(f2)+'=')
    
            ans.append(f1*f2)
    
        else:
    
            while f1/f2>1:
    
                f1,f2=createF()
    
            q.append(str(f1)+'÷'+str(f2)+'=')
    
            ans.append(Fraction(f1,f2))

    5.测试运行

    整数运算测试

     

    真分数运算测试

     

    6. 改进程序性能

    Fraction库代替了直接输出,程序变得简洁好看。

     

    7.学习总结

    不过不用Fraction库,分数的四则运算结果显示会表示成float形式,不美观,因此使用了Fraction库。

    第一次使用GitHub上传代码。

    本文参考:https://www.cnblogs.com/pirigg/p/10562302.html

  • 相关阅读:
    最小路径
    零钱兑换
    硬币
    三步问题
    区域和检索
    除数博弈
    URI和URL的辨别
    交叉编译OpenMP
    牛客挑战赛44D-数列的和
    CF1408H. Rainbow Triples
  • 原文地址:https://www.cnblogs.com/loverboy88/p/13700302.html
Copyright © 2011-2022 走看看