在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

