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

如何在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}')

额外优化说明

  1. 用循环替代重复的6次输入代码,结构更简洁
  2. 函数新增返回值,实现猜对即终止游戏的逻辑
  3. 用list()直接转换字符串为列表,简化代码
  4. 通过set()去重共同字母,避免重复显示同一字母

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:37:37