如何在Python函数外使用变量?解决UnboundLocalError报错
解决Wordle复刻中的UnboundLocalError问题
你遇到的UnboundLocalError根源有两个:一是checar_palavra()函数中先访问palpite长度再赋值,Python会将其判定为局部变量,触发未定义就调用的错误;二是函数依赖全局变量word,代码耦合性高。以下是直接可行的修复方案:
核心修改点
- 将
palpite和word作为参数传入函数,消除全局变量依赖 - 调整
while循环逻辑:先获取输入再校验长度,避免未定义就访问变量 - 修复
input()的语法错误(原代码用逗号拼接字符串会报错)
修正后的完整代码
import random def palavra_aleatoria(): with open('lista.txt') as f: words = f.read().splitlines() return random.choice(words) def checar_palavra(palpite, word): # 先获取输入再校验长度,避免未定义变量问题 while len(palpite) != 5: palpite = input(f'Essa palavra tem {len(palpite)} letras. Digite uma palavra de 5 letras: ') if palpite == word: print(f'Parabéns, a palavra correta é {palpite}') return True # 返回True标记猜对,提前终止游戏 else: letras = list(word) letras_palpite = list(palpite) # 去重后显示共同字母,避免重复输出 iguais = list(set([letra for letra in letras if letra in letras_palpite])) print(f'A palavra contém: {iguais}') return False # 返回False标记未猜对,继续游戏 word = palavra_aleatoria() tentativas = 6 # 遵循Wordle默认6次尝试规则 for _ in range(tentativas): palpite = input('Digite uma palavra de 5 letras: ') if checar_palavra(palpite, word): exit() # 猜对后直接退出程序 print(f'Fim do jogo! A palavra correta era {word}')
额外优化说明
- 用循环替代重复的6次输入代码,结构更简洁
- 函数新增返回值,实现猜对即终止游戏的逻辑
- 用
list()直接转换字符串为列表,简化代码 - 通过
set()去重共同字母,避免重复显示同一字母
内容的提问来源于stack exchange,提问作者Mauricio Geraldi
相关产品推荐
相关产品推荐

