Python for循环异常求助:重复字母处理出现位置错误
解决你的Python猜单词游戏循环问题
嘿,我一眼就揪出了两个搞破坏的小bug,咱们快速修正,还能保住你代码的简洁性:
问题根源
- 下划线列表长度不匹配:你手动初始化了7个下划线,但目标单词"letter"只有6个字母,这就多出来一个空位,处理重复字母时会误把字母塞到这个多余的位置里。
- 循环写法错误:
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
相关产品推荐
相关产品推荐

