Python在def szint()中定义的变量N调用时提示未定义如何解决
问题原因
这是Python变量作用域的规则导致的:
- 函数内部定义的普通变量默认属于局部变量,仅在函数内部的代码块中有效,函数外部无法直接访问。你在
szint()函数内定义的N就是局部变量,最后一行调用variansok(N)时,全局作用域没有定义N,因此触发未定义报错。 - 另外你当前用递归实现的输入校验逻辑也存在缺陷:如果用户第一次输入的数值超出范围,递归调用
szint()时的输入结果无法被外层代码获取,就算调整了作用域也会出现逻辑错误。
修复方案
最规范的写法是调整函数为带返回值的形式,在全局作用域用变量接收函数返回的结果,参考代码如下:
import random def szint(): N = int(input('Hanyadik emelet színezését kéred? (1.-50. szint) ')) if N > 50 or N < 1: print('Ez nincs a megadott tartományban, válassz egy másik szintet!') # 递归调用后返回结果 return szint() # 输入合法就返回N return N def szinezes(): I = int(input('Hanyadik fajtát? (1.-1 000 000 000 000 000. színezés) ')) if I > 1000000000000000 or I < 1: print('Ez nincs a megadott tartományban, válassz egy másik szintet!') return szinezes() return I # 用变量接收函数返回的结果 valid_N = szint() valid_I = szinezes() def variansok(length): alap_szinezés = 'FPZ' varians = ''.join((random.choice(alap_szinezés)) for x in range(length)) variansok(valid_N)
如果确实需要在全局使用N,也可以在函数内部给变量加global声明,但这种写法会提高代码耦合度,不推荐优先使用。
内容的提问来源于stack exchange,提问作者Péter Gulyás
相关产品推荐
相关产品推荐

