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

使用termcolor开发Wordle时,彩色字符串存入列表异常求助

解决Termcolor彩色字符串存入列表后显示异常及Wordle逻辑错误

核心问题拆解

  • 列表打印方式错误:直接print(guess_list)会输出元素的原始表示形式,把Termcolor生成的ANSI颜色转义序列显示成乱码字符,而非解析为对应颜色。
  • 字符匹配逻辑错误:你在letter_analyzation里错误地用了正确单词的字符word[i]生成彩色文本,实际应该标记用户猜测的字符guess[i];同时条件嵌套混乱,导致颜色判断逻辑出错。
  • 输入函数无返回值:input_word递归时没返回结果,输入长度不符合要求时会返回None,引发后续报错。
  • 全局变量滥用:全局guess_list容易造成状态混乱,改用局部变量更安全。

修正后的完整代码

import random
from termcolor import colored

print('Wordle')

word_list = ['apple', 'fudge', 'caked', 'brain', 'lives', 'stomp', 'epoxy', 'blood', 'board', 'broad', 'baste', 'grate', 'spade', 'slice', 'price', 'curse', 'based', 'brace', 'place', 'creed', 'greed']

def word_picker():
    random_num = random.randint(0, len(word_list) - 1)
    return word_list[random_num]

def input_word():
    guess = input('Guess: ').lower()  # 统一转小写,避免大小写匹配问题
    if len(guess) == 5:
        return guess
    else:
        print("请输入5个字符的单词!")
        return input_word()  # 递归必须返回结果

def letter_analyzation(guess, word):
    guess_colored = []
    for i in range(5):
        char = guess[i]
        if char == word[i]:
            # 位置正确,标记绿色
            guess_colored.append(colored(char, 'green'))
        elif char in word:
            # 字符存在但位置错误,标记黄色
            guess_colored.append(colored(char, 'yellow'))
        else:
            # 字符不存在,标记灰色
            guess_colored.append(colored(char, 'grey'))
    return guess_colored

def check_win(guess, word):
    return guess == word

def Wordle():
    previous_guesses = []
    win = False
    counter = 0
    word = word_picker()

    while counter < 6:  # 保留6次猜测机会,符合原版Wordle规则
        counter += 1
        guess = input_word()
        if not guess:
            continue
        
        colored_guess = letter_analyzation(guess, word)
        # 把彩色字符列表拼接成字符串再打印,终端会正确解析颜色
        print(''.join(colored_guess))
        
        if check_win(guess, word):
            print('Congrats, you have won!')
            win = True
            break

        previous_guesses.append(''.join(colored_guess))
        print('Previous guesses:')
        for g in previous_guesses:
            print(g)

    if not win:
        print(f'You have lost! The correct word was: {word}')

Wordle()

while True:
    reset = input('Would you like to try again? y/n: ').lower()
    if reset == 'y':
        Wordle()
    elif reset == 'n':
        break
    else:
        print("请输入y或n!")

关键修正说明

  1. 颜色显示修复:用''.join(colored_guess)将列表中的彩色字符串拼接成整体后打印,终端会正确识别ANSI转义序列并显示颜色,而非输出原始列表的乱码形式。
  2. 逻辑修正:
    • 改为标记用户猜测的字符,确保颜色和输入对应;
    • 调整判断顺序:先匹配位置(绿色),再匹配字符存在性(黄色),最后标记灰色,逻辑更清晰。
  3. 输入函数修复:递归时添加return,确保始终返回有效猜测;统一转小写,避免大小写不匹配的问题。
  4. 移除全局变量:把guess_list和previous_guesses改为函数局部变量,避免全局状态污染。
  5. 体验优化:失败时显示正确单词,重试逻辑更健壮,猜测次数符合原版规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:45:45