自动生成小学四则运算

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

原文地址:https://www.cnblogs.com/loverboy88/p/13700302.html