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

在Python函数中编写if语句出现报错,求问题原因

代码错误分析与修复方案

核心错误点

  • 语法错误:滥用括号包裹函数体
    TrafficDrugs和getSlaves函数里用()包裹代码块是Python语法不允许的,函数体必须依靠缩进划分,直接删除多余括号即可。

  • 赋值逻辑错误:混淆比较与赋值运算符
    TrafficDrugs里的slaveQuestion1 == input(...)是比较操作,不是赋值,要改成slaveQuestion1 = input(" Push P if you want a rack")。另外该函数参数slaveQuestion1完全多余,直接在函数内部定义变量就行。

  • 递归调用错误:无终止条件且返回值无效
    TrafficDrugs里递归调用自身,但函数默认返回None,用它作为if条件永远为假,且没有终止逻辑,会触发无限递归报错。换成while循环实现重复询问更合理。

  • 全局变量访问错误:未声明直接修改
    racks是全局变量,在函数内修改必须先声明global racks,否则Python会将其判定为局部变量,触发"local variable 'racks' referenced before assignment"错误。

  • 作用域错误:函数无法访问局部变量
    waysToGetRacks是if startScreen == "1"代码块内的局部变量,getSlaves函数直接访问会报错未定义,要么把它作为参数传入函数,要么声明为全局变量。

  • 函数调用错误:传参不匹配
    TrafficDrugs定义时要求传入参数,但getSlaves里调用TrafficDrugs()未传参,会触发类型错误。如果函数不需要参数,直接修改定义去掉参数即可。


修复后的示例代码

racks = "1"
racksPerSecond = 0

gameScreenChoice1 = "Traffic Drugs (1) "
gameScreenChoice2 = "Get Slaves (2) "

print("You are NBA Young Boy (Never Broke Again)")

startScreen = input("To start your journey out the trenches press 1: ")

if startScreen == "1":
    print("What do you want to do?")
    waysToGetRacks = input(gameScreenChoice1 + gameScreenChoice2)

    def TrafficDrugs():
        global racks
        # 用while循环实现重复询问,直到用户输入P
        while True:
            slave_response = input("   Push P if you want a rack: ")
            if slave_response.upper() == "P":
                racks += "1"
                print(f"Racks updated: {racks}")
                break  # 完成操作后退出循环

    def getSlaves():
        print("You got slaves!")  # 补充函数逻辑

    # 根据用户输入调用对应函数
    if waysToGetRacks == "1":
        TrafficDrugs()
    elif waysToGetRacks == "2":
        getSlaves()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:39:14