You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何将随机选取的函数作为if判断条件实现数学测验需求

问题原因
  • 你给prob赋值时直接调用了选中的运算函数,而四个运算函数均无返回值,因此prob的值始终为None,后续所有prob == numlist[x]的判断全部不成立,导致反馈逻辑完全被跳过。正确写法是先把选中的函数本身存到变量,再单独执行调用。
  • 你试图用add.addition的方式读取运算结果是错误的,addition是你定义的全局变量,不是add函数的属性,直接调用变量名即可读取。
  • 现有代码还有多个隐性问题:除法逻辑中先计算除法再判断除数是否为0,会直接触发报错;减法逻辑未覆盖结果为0的场景,会出现无题目输出的情况;递归生成符合要求的题目可能触发栈溢出;字符串对比答案容错性极低,用户多输一个空格就会被判错。
修复后可用代码
import random

def add():
    num1 = random.randint(0, 999)
    num2 = random.randint(0, 999)
    res = num1 + num2
    print(f' {num1}\n+{num2}')
    return res

def sub():
    while True:
        num1 = random.randint(0, 999)
        num2 = random.randint(0, 999)
        res = num1 - num2
        if res >= 0:
            break
    print(f' {num1}\n-{num2}')
    return res

def mult():
    num1 = random.randint(1, 12)
    num2 = random.randint(1, 12)
    res = num1 * num2
    print(f'{num1} * {num2}')
    return res

def div():
    while True:
        num1 = random.randint(0, 150)
        num2 = random.randint(1, 150) # 直接限定除数不为0
        if num1 % num2 == 0:
            res = num1 // num2
            break
    print(f'{num1} / {num2}')
    return res

numlist = [add, sub, mult, div]

def problem():
    while True:
        # 先选函数,再调用,同时拿到返回的正确结果
        prob_func = random.choice(numlist)
        correct_ans = prob_func()
        # 转换用户输入为数字对比,容错率更高
        try:
            user_ans = int(input("请输入答案:"))
        except ValueError:
            print("输入无效,请输入数字")
            continue
        if user_ans == correct_ans:
            print('Congrats! You got it right.')
        else:
            print(f'Incorrect. The answer is {correct_ans}.')
        # 控制是否继续
        done = input('Type "done" if you want to be done. Press Enter if you want another problem.\n')
        if done.lower() == 'done':
            break

problem()
核心修改说明
  • 把四个运算函数改为直接返回计算结果,不需要用全局变量存结果,逻辑更简洁也避免了全局变量污染。
  • 选函数和调用逻辑拆分,同时直接拿到正确答案,不需要再判断当前是哪类运算,省去了大量冗余的if-else判断。
  • 用循环代替递归生成符合要求的减法、除法题目,避免栈溢出风险,同时修复了除数为0、减法结果为负的问题。
  • 增加了用户输入有效性校验,避免用户输入非数字内容导致程序崩溃。

内容的提问来源于stack exchange,提问作者Cade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:36:02