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

在其他函数定义变量后出现Variable not defined错误求助

问题解决:变量未定义错误

核心原因:变量作用域限制

你在multiply函数里定义的multiplied是局部变量,只能在multiply函数内部使用,order函数根本访问不到它。同理division、addition、subtraction这几个变量也存在同样的问题——它们只在各自的函数内部有效,外部函数无法直接调用。

具体修改步骤

1. 让每个函数返回结果值

每个运算判断函数(multiply、division等)需要在最后返回定义的布尔变量,确保外部能拿到判断结果。以multiply为例,修改后代码如下:

def multiply():
    surrounding_x()
    
    multiplied = False
    x_index = chars.index("x")
    before_x = chars[x_index - 1]
    num = 2
    while num <= 50:
        if int(before_x) == num:
            print(f"X is being multiplied by {num}.")
            multiplied = True
            break  # 找到匹配值后退出循环
        num += 1 

    if num > 50:  # 循环结束后num超过50,说明未找到匹配乘数
        print('X is not being multiplied. ')
    return multiplied  # 最后返回判断结果

注意:原代码里return multiplied后面的break是无效的,因为return会直接退出函数,所以调整为先break再统一返回值,或者直接在if里return True,最后return False,两种写法都可以。

其他几个函数(division、addition、subtraction)也要做同样修改:在函数内部定义判断变量,完成逻辑后返回该变量。

2. 在order函数中接收函数返回值

调用每个运算函数时,把它们的返回值赋值给order函数内部的变量,之后就能正常判断了:

def order():
    # 调用函数并接收返回结果
    division_flag = division()
    addition_flag = addition()
    subtraction_flag = subtraction()
    multiplied_flag = multiply()

    # 根据返回值判断逻辑
    if multiplied_flag:
        pass
    if division_flag:
        pass
    if addition_flag:
        pass
    if subtraction_flag:
        pass

这里变量名可以自己取,比如也叫division,但建议和函数名区分开,避免混淆。另外判断布尔值时,直接写if 变量名就可以,不用写== True,更简洁规范。

额外提醒

Python中变量的作用域分为局部作用域(函数内部)和全局作用域(函数外部):

  • 函数内部定义的变量默认是局部的,外部无法访问
  • 如果想让函数内部的变量变成全局变量,可以用global 变量名声明,但不推荐新手这么做——全局变量容易导致代码逻辑混乱,用函数返回值的方式更清晰安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:46:28