用python生成小学生一年级算术模板

减少重复劳动
摘要由CSDN通过智能技术生成

孩子学习口算压力山大,现在的要求太高了需要5分钟内答满150道题,完成这个目标需要多多的练习。
加法要求和不能大于21,考虑到20以上的进位问题,孩子目前还是不熟练没有添加进去。减法差不能是负数,被减数是个位数的。除法先取乘法的商作为被除数,这样就可以被整除了。还加入了左右括号的填空,灵活转换被加数和被减数的算法。由于输出的加减乘除符号字符会因为字体不同而有差异,在pycharm的控制台输出是整齐排列的,而复制到word就会各种不对齐,对比使用Courier New字体排列的最完美了。所以复制到word要修改一下字体,达到强迫症的对齐要求。

# coding=utf-8
import random

result = []
operList = ["+", "-"]  # 如果需要乘法和除法则替换为["+", "-", "*", "/"]
unique = []  # 用于统计去重

print("\t\t 姓名____________   用时___________   正确率_____________  \n ")
def generate_num():
    a = random.randint(1, 20)
    b = random.randint(0, 20)  # 100以内加法 可以 b = random.randint(0, 100-a)
    oper = random.choice(operList)

    if oper == "-":
        b = random.randint(0, 10)
        if a < b:
            a, b = b, a
        ans = eval('%d%s%d' % (a, oper, b))
        oper = "-"
    elif oper == "+":
        if a > 10 and b > 10:
            a -= 10
            b -= 10
        elif a + b > 20:
            if a > b:
                a -= 10
            else:
                b -= 10
        ans = eval(str(a) + oper + str(b))

    elif oper == "*":
        a = random.randint(1, 9)
        b = random.randint(0, 9)
        ans = a * b
        oper = "×"

    elif oper == "/":
        a = random.randint(0, 9)
        b = random.randint(1, 9)  # 被除数不能为0
        ans = a * b
        oper = "÷"

    if str(a) + oper + str(b) in unique:  #用于去重,不能保证完全没有重复
        a, b, oper, ans = generate_num()
    unique.append(str(a) + str(oper) + str(b))

    return a, b, oper, ans


for i in range(25):  # 常规题目要几行
    for g in range(5):  # 每行要几个算式
        a, b, oper, ans = generate_num()

        if oper == "÷":
            print(str(ans).ljust(2, ' ') + str(oper) + str(b).rjust(2, ' ') + " =   ", end="     ")  # 对齐打印,不换行
            result.append(str(a))
        else:
            print(str(a).ljust(2, ' ') + str(oper) + str(b).rjust(2, ' ') + " =   ", end="     ")
            result.append(str(ans))

        # 也可以将完整题目和答案加入 result.append(str(a) + str(oper) + str(b) + "=" + str(eval('%d%s%d' % (a, oper, b))))
    print()  # 输出五个算式换行

for i in range(6
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值