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

Python colorama搭配replace、input使用颜色不生效的Wordle开发问题

问题根源

你代码里颜色输出异常、乱码是三个逻辑问题叠加导致的,和input()函数本身无关:

  • 第一,str.replace(待替换字符, 新内容, 1)默认从字符串头部开始找第一个匹配项替换,不会按你当前遍历的位置替换对应字符。举个例子,如果你猜的词是"eerie",遍历到第3位的e时,replace会直接把字符串最开头的第一个e替换掉,之前给第一位加的颜色码直接被覆盖,位置完全错位。
  • 第二,你在遍历过程中往guess变量里拼接colorama的ANSI转义码,这些不可见的控制字符会改变字符串长度和内容,后续循环的索引会直接偏移,根本对应不上原单词的字符位置,还会把转义码插在单词中间打出乱码。
  • 第三,Windows环境下使用colorama必须先执行初始化,否则终端无法识别ANSI颜色码,会直接把转义序列当普通字符打印。另外加完颜色后如果不重置,后续所有终端输出都会带上最后设置的颜色。
修复方案

不要在原输入的guess字符串上直接做替换操作:先把用户输入的原始猜测词存下来不要修改,单独建一个结果列表存每个字符的显示内容,等所有字符的匹配状态判断完,再统一拼接颜色码输出。
修复后的核心逻辑代码如下:

from colorama import Fore, init
# Windows环境下必须先初始化colorama,autoreset参数开启后打印完自动重置颜色
init(autoreset=True)

answer = "apple" # 替换为你的游戏目标答案词
playerTurns = 0
win = False

while playerTurns < 7 and not win:
    guess = input("Guess a 5 letter word: ").strip().lower()
    while len(guess) != 5:
        guess = input("Guess a 5 letter word: ").strip().lower()
    
    display_chars = []
    # 逐位判断匹配状态,全程不修改原始guess变量
    for idx, char in enumerate(guess):
        if char == answer[idx]:
            # 位置完全匹配,标记绿色
            display_chars.append(f"{Fore.GREEN}{char}")
        elif char in answer:
            # 字母存在但位置不对,标记黄色
            display_chars.append(f"{Fore.YELLOW}{char}")
        else:
            # 字母不存在,保留默认终端颜色
            display_chars.append(char)
    
    # 拼接为最终显示字符串打印
    display_guess = "".join(display_chars)
    print(display_guess)

    playerTurns += 1
    if guess == answer:
        win = True
额外优化提示

如果要实现完全符合官方Wordle规则的黄色标记逻辑(比如答案里某个字母只出现1次,猜测词里出现多次时,只有1个对应字母标黄),可以先统计答案里每个字母的剩余计数,逐位标记完绿色匹配项之后,再处理黄色标记,避免重复标黄的逻辑错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:48:17