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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:01