使用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!")
关键修正说明
- 颜色显示修复:用
''.join(colored_guess)将列表中的彩色字符串拼接成整体后打印,终端会正确识别ANSI转义序列并显示颜色,而非输出原始列表的乱码形式。 - 逻辑修正:
- 改为标记用户猜测的字符,确保颜色和输入对应;
- 调整判断顺序:先匹配位置(绿色),再匹配字符存在性(黄色),最后标记灰色,逻辑更清晰。
- 输入函数修复:递归时添加
return,确保始终返回有效猜测;统一转小写,避免大小写不匹配的问题。 - 移除全局变量:把
guess_list和previous_guesses改为函数局部变量,避免全局状态污染。 - 体验优化:失败时显示正确单词,重试逻辑更健壮,猜测次数符合原版规则。
内容的提问来源于stack exchange,提问作者dchavre
相关产品推荐
相关产品推荐

