首页 > 编程语言 > 详细

用Python自动生成小学四则运算题目

时间:2020-09-20 08:47:58      阅读:64      评论:0      收藏:0      [点我收藏+]

Github项目地址: https://github.com/Lily4323/lily-

   1、 题目要求:

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

    b:除了整数外,还要支持真分数的四则运算、

   2、PSP表格:

(在开始实现程序之前,通过PSP表格估计程序的各个模块的开发上耗费的时间)

 

PSP2.1

Personal Software Process Stages

预估耗时(min)

实际耗时(min)

Planning

计划

15

30

 Estimate

估计这个任务需要多少时间

5

15

Development

开发

60

120

Analysis

需求分析

10

20

Design Spec

生成设计文档

20

30

Design

具体设计

10

20

Code

具体编码

60

80

Test

测试(自我测试,修改代码,提交修改)

40

60

Reporting

报告

20

30

Summary

合计

 240

 415

 

    3、项目思路:

a.四则运算加减乘除,采用两个随机数,由于不能出现负数,所以在对两个随机数进行减法运算的时候,需要进行比较大小,而除法在运算中,除数不能取0。

 

     1)设计实现

 

  定义函数:用def szys()实现随机生成四则运算最后输出算式并返回正确答案

      2)代码说明:

import random
#四则运算
def ysfz():
    sym = [, , ×, ÷]
    f= random.randint(0, 3)
    n1 = random.randint(1, 20)
    n2 = random.randint(1, 20)
    result = 0
    if f== 0:#加法
       result  = n1 + n2
    elif f == 1:#减法,要先比较大小,防止输出负数
        n1, n2 = max(n1, n2), min(n1, n2)
        result  = n1 - n2
    elif f== 2:#乘法
        result  = n1 * n2
    elif f == 3:#除法,要比较大小,并循环取整除
        n1, n2 = max(n1, n2), min(n1, n2)
        while n1 % n2 != 0:
            n1 = random.randint(1, 10)
            n2 = random.randint(1, 10)
            n1, n2 = max(n1, n2), min(n1, n2)
        result  = int(n1 / n2)
    print(n1, sym[f], n2, = , end=‘‘)
    return result
print(请输入1进行四则运算) 
n=int(input())
#当输入1时,进行四则运算,调用函数syzs()
if n==1:
    while True:
        result  = ysfz()
        j= input()
        s= int(j)
        if s== result :
            print(正确,真棒)
        else:
            print(错误,继续加油, result )

    4、 测试运行:

技术分享图片

 

   5、思路改进

 我们知道,在进行四则运算时进行真分数运算应注意假分数的影响,因此我们在进行代码编写时应注意分数的运算,代码更新如下:

import random
from fractions import Fraction
##两个整数的四则运算
def c1(q, ans):
    symbol = random.choice([+, -, *, /])  # 生成随机符号
    if symbol == +:
        n1 = random.randint(0, 20)
        n2 = random.randint(0, 20)
        q.append(str(n1) + + + str(n2) + =)
        ans.append(n1 + n2)
    elif symbol == -:
        n1 = random.randint(0, 20)
        n2 = random.randint(0, 20)
        n1,n2 = max(n1,n1),min(n1,n2)#防止出现负数
        q.append(str(n1) + - + str(n2) + =)
        ans.append(n1 - n2)
    elif symbol == *:
        n1 = random.randint(0, 20)
        n2 = random.randint(0, 20)
        q.append(str(n1) + × + str(n2) + =)
        ans.append(n1 * n2)
    else:
        n1 = random.randint(0, 20)
        if n1 == 0:
            n2 = random.randint(1, 20)
        else:
            n2 = random.randint(1, n1 + 1)
        q.append(str(n1) + ÷ + str(n2) + =)
        ans.append(Fraction(n1, n2))
##随机生成两个分数
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
def f(f):#分数的转换
    a=f.numerator #分子
    b=f.denominator #分母
    if a%b==0:#为整数
        return %d%(a/b)
    elif a<b:#为真分数
        return %d%s%d % (a,/,b)
    else:#为带分数
        c=int(a/b)
        a = a - c * b
        return %d%s%d%s%d % (c,,a,/,b)
##两个分数的四则运算
def c2(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))
def main():
    while 1:
        print("输入题目的数量", end=  )
        k = int(input())
        p = 100 / k
        s = 0
        q = []
        ans = []
        ans2 = []
        for i in range(k):
            n = random.randint(1, 4)
            if n == 1:
                c1(q, ans)
                g = Fraction(ans[i])
                ans2.append(f(g))
            else:
                c2(q, ans)
                g = Fraction(ans[i])
                ans2.append(f(g))#记录带分数答案
        for i in range(k):
            print("第{}题:{}".format(i + 1, q[i]), end="  ")
            a = input()
            if a == str(ans[i]):
                s = s + p
        print("所得的分数为:{}".format(s))
        print("正确答案:", end="  ")
        for i in range(k):
            if str(ans[i]) == str(ans2[i]):
                print(q[i] + str(ans[i]))
            else:
                print("{}{}或{}".format(q[i],str(ans2[i]),str(ans[i])))
if __name__ == __main__:
    main()

    修改后的结果显示:

技术分享图片

 

 接下来我们再回到我们的SPS表格记录下我们在各阶段所用的实际时间。

我们的小学四则运算项目基本完成啦。。。。

 

用Python自动生成小学四则运算题目

原文:https://www.cnblogs.com/psl1234/p/13698010.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!