• 随机生成小学算数题项目


    Document Gitee代码仓库

    题目描述:   通过python语言编写一个能够自动生成小学四则运算的程序(注意是给小学生用的,要是结果出现负数的话他们会很迷茫的!),同时,除了整数外,还要支持真分数的四则运算. 1.程序设计 首先以“1+1=”为例,我们要生成简单的四则运算题目需要两个整数或是分数,为了将答案与算式分类,我们分别用两个列表来储存。

    q[]用来存储问题,ans[]用来存储答案。我们可以通过random模块生成一定区间里的随机数,分数也可以通过随机生成分子和分母的形式随机生成。同时分数可以使用Fraction模块,可以同时实现分数与整数的运算以及分子和分母的约分。

    下面是各个函数的代码:
    2.实现代码
    `
    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 f1f2>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]))
    #a = input()
    a = '0'
    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()更新升级: 在原有程序的基础上,我添加了一个转换假分数答案为带分数答案(存储在ans2[]列表中)的函数f(f),以便当学生给出带分数答案时程序不会认为是错误的。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)`
    更新并修改了主函数后代码运行结果如下:

    性能分析:

  • 相关阅读:
    5 粘包现象与解决方案
    4 Socket代码实例
    协程与多路io复用epool关系
    基于selector的socket并发
    基于select类型多路IO复用,实现简单socket并发
    协程实现多并发socket,跟NGINX一样
    利用协程实现简单爬虫
    协程
    进程池pool
    进程锁 Lock
  • 原文地址:https://www.cnblogs.com/shuxincheng/p/13703700.html
Copyright © 2020-2023  润新知