python学习之给小学生数学运算题(混合加减乘除法)

python代码随机生成加减乘除混合运算题,给熊孩子练习很不错哦!!!
寒假在家不能让他闲着,熊孩子的计算能力一如既往的差,学渣老爹继续根据学习进度自动生成寒假作业。不多说了,直接上代码,本着能用就好的原则,并没有调优,也没有把对应功能抽成函数。

代码:(没有过滤九九乘法表规则,有点乱)

import random
#定义多个变量并赋值
exp1,exp2 = "",""
str1,str2 = "",""
j=0
count=int(input("请输入出题数量:"))
while j<count:
    if j<count:                              # 随机产生"+"或 "-"号 或"*"号 或"/"号
        flag = random.choice(["+", "-", "*", "/"])   # 随机产生"+"或 "-"号 或"*"号 或"/"号
        if flag == "+":
            a = random.randint(0, 100)
            b = random.randint(0, 100-a)
            result=a+b
        # 如果是减法,被减数和减数都应小于100
        elif flag == "-":
            a = random.randint(1, 100)
            b = random.randint(1, 100)
            # ab比较,较大的数为被减数
            if a < b:
               a,b=b,a
            result=a-b
        elif flag == "*":
            a = random.randint(1, 100)
            b = random.randint(1, 100)
            result=a*b
        elif flag == "/":
            a = random.randint(1, 100)
            b = random.randint(1, 100)
            if a < b:
               a,b=b,a
            result=int(a/b)
        a = str(a).ljust(2, " ")       # ljust左对齐
        b = str(b).ljust(2, " ")
        exp1 = a +" "+ flag +" "+ b + " ="
        exp2 = a +" "+flag +" "+ b + " ="+str(result)
        if j%2==0:                       #  j为偶数,不换行
            str1 = str1 + exp1 + '\t'
            str2 = str2 + exp2 + '\t'        
        else:                              #  j为奇数,换行
            str1 = str1 + exp1 + '\n'
            str2 = str2 + exp2 + '\n'
        j=j+1
with open('math.txt','w') as f:
    f.write(str1)
with open('key.txt','w') as f:
    f.write(str2)
print(count,"道混合加减乘除法题:")    
print(str1)
print(count,"道混合加减乘除法题(带答案):")  
print(str2)

运行截图:

在这里插入图片描述

在新浪博客找到了一个比较好的代码,可参考:
注:如果是加号,保证两个数都不超过50,目前学的都是100以内的数;
如果是除号,保证在乘法口诀范围内即可。
代码实现:

import random
string = ""

for day in range(1, 31):
    string = ""
    string = string + "\n快乐寒假第 " + str(day) + " 天:\n(1)快速口算\n"
    #用来记录每行算术题的个数
    num = 0
    #生成每天20道加减乘除
    for i in range(1, 13):
        flag = random.choice([" + ", " - ", " × ", " ÷ "])
        exp = ""
        # 如果是加号,保证两个数都不超过50,目前学的都是100以内的数
        if flag == " + ":
            a = str(random.randint(1, 50)).ljust(2, " ")
            b = str(random.randint(1, 50)).ljust(2, " ")
            exp = a + flag + b
        # 如果是减号,保证被减数和减数都小于等于100即可
        if flag == " - ":
            a = random.randint(1, 100)
            b = random.randint(1, 100)
            # 保证较大的数作为被减数
            if a < b:
                tmp = a
                a = b
                b = tmp
            a = str(a).ljust(2, " ")
            b = str(b).ljust(2, " ")
            exp = a + flag + b
        # 如果是乘号,保证两个数都小于10即可
        if flag == " × ":
            a = str(random.randint(0, 9)).ljust(2, " ")
            b = str(random.randint(0, 9)).ljust(2, " ")
            exp = a + flag + b
        # 如果是除号,保证在乘法口诀范围内即可
        if flag == " ÷ ":
            a = random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40,
42, 45, 48, 49, 54, 56, 63, 64, 72, 81])
            if a == 81:
                b = 9
            if a == 72:
                b = random.choice([1, 8, 9])
            if a == 64:
                b = 8
            if a == 63:
                b = random.choice([1, 7, 9])
            if a == 56:
                b = random.choice([1, 7, 8])
            if a == 54:
                b = random.choice([1, 6, 9])
            if a == 49:
               b = 7
            if a == 48:
                b = random.choice([1, 6, 8])
            if a == 45:
                b = random.choice([1, 5, 9])
            if a == 42:
                b = random.choice([1, 6, 7])
            if a == 40:
                b = random.choice([1, 5, 8])
            if a == 36:
                b = random.choice([1, 4, 9])
            if a == 35:
                b = random.choice([1, 5, 7])
            if a == 32:
                b = random.choice([1, 4, 8])
            if a == 30:
                b = random.choice([1, 6, 5])
            if a == 28:
                b = random.choice([1, 4, 7])
            if a == 27:
                b = random.choice([1, 3, 9])
            if a == 25:
                b = random.choice([1, 5])
            if a == 24:
                b = random.choice([1, 3, 4, 6, 8])
            if a == 21:
                b = random.choice([1, 3, 7])
            if a == 20:
                b = random.choice([1, 4, 5])
            if a == 18:
                b = random.choice([1, 2, 3, 6, 9])
            if a == 16:
                b = random.choice([1, 2, 4, 8])
            if a == 15:
                b = random.choice([1, 3, 5])
            if a == 14:
                b = random.choice([1, 2, 7])
            if a == 12:
                b = random.choice([1, 2, 3, 4, 6])
            if a == 10:
                b = random.choice([1, 2, 5])
            if a == 9:
                b = random.choice([1, 3, 9])
            if a == 8:
                b = random.choice([1, 2, 4, 8])
            if a == 7:
                b = random.choice([1, 7])
            if a == 6:
                b = random.choice([1, 2, 3, 6])
            if a == 5:
                b = random.choice([1, 5])
            if a == 4:
                b = random.choice([1, 2, 4])
            if a == 3:
                b = random.choice([1, 3])
            if a == 2:
                b = random.choice([1, 2])
            if a == 1:
                b = 1
            if a == 0:
                b = random.randint(1, 9)
            a = str(a).ljust(2, " ")
            b = str(b).ljust(2, " ")
            exp = a + flag + b
        if num < 3:
            string = string + exp + " =".ljust(7, " ")
            num = num + 1
        # 达到4个题目,换行
        else:
            string = string + exp + "=\n"
            num = 0

    string = string + "(2)提高口算\n"
    ###用来生成两个运算符的算式
    # 用来记录每行算术题的个数
    num = 0
    for i in range(1, 7):
        result = 0
        flag = random.choice([" + ", " - ", " × ", " ÷ "])
        exp = ""
        # 如果是加号,保证两个数都不超过50,目前学的都是100以内的数
        if flag == " + ":
            a = str(random.randint(1, 50)).ljust(2, " ")
            b = str(random.randint(1, 50)).ljust(2, " ")
            exp = a + flag + b
            result = int(a) + int(b)
        # 如果是减号,保证被减数和减数都小于等于100即可
        if flag == " - ":
            a = random.randint(1, 100)
            b = random.randint(1, 100)
            # 保证较大的数作为被减数
            if a < b:
                tmp = a
                a = b
                b = tmp
            a = str(a).ljust(2, " ")
            b = str(b).ljust(2, " ")

            exp = a + flag + b
            result = int(a) - int(b)

        # 如果是乘号,保证两个数都小于10即可
        if flag == " × ":
            a = str(random.randint(0, 9)).ljust(2, " ")
            b = str(random.randint(0, 9)).ljust(2, " ")
            exp = a + flag + b
            result = int(a) * int(b)
        # 如果是除号,保证在乘法口诀范围内即可
        if flag == " ÷ ":
            a = random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40,
42, 45, 48, 49, 54, 56, 63, 64, 72, 81])
            if a == 81:
                b = 9
            if a == 72:
                b = random.choice([1, 8, 9])
            if a == 64:
                b = 8
            if a == 63:
                b = random.choice([1, 7, 9])
            if a == 56:
                b = random.choice([1, 7, 8])
            if a == 54:
                b = random.choice([1, 6, 9])
            if a == 49:
                b = 7
            if a == 48:
                b = random.choice([1, 6, 8])
            if a == 45:
                b = random.choice([1, 5, 9])
            if a == 42:
                b = random.choice([1, 6, 7])
            if a == 40:
                b = random.choice([1, 5, 8])
            if a == 36:
                b = random.choice([1, 4, 9])
            if a == 35:
                b = random.choice([1, 5, 7])
            if a == 32:
                b = random.choice([1, 4, 8])
            if a == 30:
                b = random.choice([1, 6, 5])
            if a == 28:
                b = random.choice([1, 4, 7])
            if a == 27:
                b = random.choice([1, 3, 9])
            if a == 25:
                b = random.choice([1, 5])
            if a == 24:
                b = random.choice([1, 3, 4, 6, 8])
            if a == 21:
                b = random.choice([1, 3, 7])
            if a == 20:
                b = random.choice([1, 4, 5])
            if a == 18:
                b = random.choice([1, 2, 3, 6, 9])
            if a == 16:
                b = random.choice([1, 2, 4, 8])
            if a == 15:
                b = random.choice([1, 3, 5])
            if a == 14:
                b = random.choice([1, 2, 7])
            if a == 12:
                b = random.choice([1, 2, 3, 4, 6])
            if a == 10:
                b = random.choice([1, 2, 5])
            if a == 9:
                b = random.choice([1, 3, 9])
            if a == 8:
                b = random.choice([1, 2, 4, 8])
            if a == 7:
                b = random.choice([1, 7])
            if a == 6:
                b = random.choice([1, 2, 3, 6])
            if a == 5:
                b = random.choice([1, 5])
            if a == 4:
                b = random.choice([1, 2, 4])
            if a == 3:
                b = random.choice([1, 3])
            if a == 2:
                b = random.choice([1, 2])
            if a == 1:
                b = 1
            if a == 0:
                b = random.randint(1, 9)
            a = str(a).ljust(2, " ")
            b = str(b).ljust(2, " ")
            exp = a + flag + b
            result = int(a) / int(b)

        flag = random.choice([" + ", " - "])
        # 如果是加号,保证和不超过100,目前学的都是100以内的数
        if flag == " + ":
            a = str(random.randint(1, 100 - result)).ljust(2, " ")
            exp = exp + flag + a
        # 如果是减号,保证能够减得着即可
        if flag == " - ":
            a = str(random.randint(0, result)).ljust(2, " ")
            exp = exp + flag + a
        if num < 2:
            string = string + exp + " =".ljust(7, " ")
            num = num + 1
        # 达到3个题目,换行
        else:
            string = string + exp + "=\n"
            num = 0

    string = string + "(3)竖式计算\n"
    ###用来生成需要运用竖式运算的题目
    # 用来记录每行算术题的个数
    num = 0
    for i in range(1, 4):
        result = 0
        flag = random.choice([" + ", " - "])
        exp = ""
        # 如果是加号,保证两个数都不超过50,目前学的都是100以内的数
        if flag == " + ":
            a = str(random.randint(1, 50)).ljust(2, " ")
            b = str(random.randint(1, 50)).ljust(2, " ")
            exp = a + flag + b
            result = int(a) + int(b)
        # 如果是减号,保证被减数和减数都小于等于100即可
        if flag == " - ":
            a = random.randint(1, 100)
            b = random.randint(1, 100)
        # 保证较大的数作为被减数
            if a < b:
                tmp = a
                a = b
                b = tmp
            a = str(a).ljust(2, " ")
            b = str(b).ljust(2, " ")

            exp = a + flag + b
            result = int(a) - int(b)

        flag = random.choice([" + ", " - "])
        # 如果是加号,保证和不超过100,目前学的都是100以内的数
        if flag == " + ":
            a = str(random.randint(1, 100 - result)).ljust(2, " ")
            exp = exp + flag + a
        # 如果是减号,保证能够减的着即可
        if flag == " - ":
            a = str(random.randint(0, result)).ljust(2, " ")
            exp = exp + flag + a
        if num < 2:
            string = string + exp + " =".ljust(7, " ")
            num = num + 1
        # 达到3个题目,换行
        else:
            string = string + exp + "=\n\n\n\n\n"
            num = 0
    print(string)

运行结果:
在这里插入图片描述
参考地址:https://blog.sina.com.cn/s/blog_6e22d8fb0102zif3.html,代码格式不对,谨慎参考。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用栈来求解表达式的值,包括加减乘除以及带括号的四则混合运算。以下是具体的实现步骤: 1. 创建两个栈,一个用于存储操作数,一个用于存储操作符。 2. 从左到右遍历表达式中的每个字符。 3. 如果当前字符是数字,则将其转换为操作数并压入操作数栈中。 4. 如果当前字符是操作符,则将其压入操作符栈中。 5. 如果当前字符是右括号,则从操作数栈和操作符栈中依次弹出操作数和操作符,直到遇到左括号为止,然后将计算结果压入操作数栈中。 6. 遍历完表达式后,将操作符栈中剩余的操作符依次弹出,并从操作数栈中弹出两个操作数进行计算,并将计算结果压入操作数栈中。 7. 最后,操作数栈中剩下的唯一元素就是表达式的计算结果。 以下是使用栈来求解表达式的值的示例代码: ```python def eval_expr(s): num_stack = [] op_stack = [] i = 0 while i < len(s): if s[i].isdigit(): j = i while j < len(s) and s[j].isdigit(): j += 1 num_stack.append(int(s[i:j])) i = j elif s[i] in '+-*/': while op_stack and precedence(op_stack[-1]) >= precedence(s[i]): op = op_stack.pop() b = num_stack.pop() a = num_stack.pop() num_stack.append(apply_op(a, b, op)) op_stack.append(s[i]) i += 1 elif s[i] == '(': op_stack.append(s[i]) i += 1 elif s[i] == ')': while op_stack[-1] != '(': op = op_stack.pop() b = num_stack.pop() a = num_stack.pop() num_stack.append(apply_op(a, b, op)) op_stack.pop() i += 1 else: i += 1 while op_stack: op = op_stack.pop() b = num_stack.pop() a = num_stack.pop() num_stack.append(apply_op(a, b, op)) return num_stack.pop() def precedence(op): if op in '+-': return 1 elif op in '*/': return 2 else: return 0 def apply_op(a, b, op): if op == '+': return a + b elif op == '-': return a - b elif op == '*': return a * b elif op == '/': return a // b print(eval_expr('(1+2)*(3+4)')) # expected output: 21 print(eval_expr('1+2*3-4/2')) # expected output: 5 ``` 在这个示例代码中,我们使用了一个 Python 列表作为栈,将整数和操作符压入栈中,然后在遇到操作符时弹出栈顶的两个操作数,并根据操作符进行计算,并将计算结果再次压入栈中。在遇到右括号时,我们从操作数栈和操作符栈中依次弹出操作数和操作符,直到遇到左括号为止,然后将计算结果压入操作数栈中。最后,当表达式遍历完毕时,栈中只剩下一个元素,这个元素就是表达式的计算结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逃逸的卡路里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值