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

Python for循环异常求助:重复字母处理出现位置错误

解决你的Python猜单词游戏循环问题

嘿,我一眼就揪出了两个搞破坏的小bug,咱们快速修正,还能保住你代码的简洁性:

问题根源

  1. 下划线列表长度不匹配:你手动初始化了7个下划线,但目标单词"letter"只有6个字母,这就多出来一个空位,处理重复字母时会误把字母塞到这个多余的位置里。
  2. 循环写法错误:for x in (RandomWord.count(Guess)-1) 完全无效——Python没法直接迭代整数,你得用range()来生成循环次数;而且count-1会让你少循环一次,导致第二个重复字母处理出错。

修正后的代码

import random
UsedLetters = []
RandomWord = "letter" #random.choice(open("GuessTheWord.txt").readlines())[:-1]
WordList = ["_"] * len(RandomWord)  # 自动匹配单词长度,避免多余下划线
Try = 1
while Try < 11:
    print("Try", Try, "/10")
    Guess = input("Please enter your guess").lower()
    if Guess.isalpha() and Guess not in UsedLetters and len(Guess) == 1:
        UsedLetters.append(Guess)
        FakeWord = RandomWord
        if Guess in RandomWord:
            for x in range(RandomWord.count(Guess)):  # 用range生成正确的循环次数
                print(RandomWord.count(Guess))
                WordList[FakeWord.find(Guess) + x] = Guess
                FakeWord = FakeWord.replace(Guess, "", 1)
            Word = ''.join(WordList)
            print(Word)
            if Word == RandomWord:
                print("You won the game!")
                break
        else:
            print("That guess is not in the word. Next try.")
        Try+=1
    elif Guess in UsedLetters:
        print("You have already used that letter.")
    else:
        print("Guess is not 1 letter.")
if Try == 11:
    print("You lost try again next time!")

关键修改说明

  • WordList = ["_"] * len(RandomWord):不管目标单词是6个字母还是更长,下划线列表都会自动匹配长度,彻底解决字母跑到末尾的问题。
  • for x in range(RandomWord.count(Guess)):用range()生成对应次数的循环(比如字母出现2次就循环2次),同时去掉了count-1,确保每个重复的字母都被正确处理。

这样修改后,代码行数和原代码几乎一致,完美解决你的问题~

内容的提问来源于stack exchange,提问作者Paris Jackson - Newman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:09:17