出于某种原因,我的for循环重复两次,即使它意识到它应该只从0到1重复。我的代码是用来猜测用户,看看那个字母是否在单词中,然后返回一个将猜测字符串放在单词中的正确位置。现在我遇到的问题是这封信多次出现。它在字母出现两次时起作用,但是当字母第二次出现时,字母首先放在正确的位置,但也放在字符串的最后位置。我不知道为什么会这样。
import random
UsedLetters = []
RandomWord = "letter" #random.choice(open("GuessTheWord.txt").readlines())[:-1]
WordList = ["_", "_", "_", "_", "_", "_", "_"]
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 (RandomWord.count(Guess)-1):
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!")
我真的很困惑。
PS,如果你能让整个过程保持完全相同的线数或更短,我会非常感激,因为我提出了一个比我的朋友更短的问题的解决方案,我想保持这种方式。 ; )答案 0 :(得分:-1)
尝试用以下方法替换你的for循环:
for x in range(0, RandomWord.count(Guess)):
print(RandomWord.count(Guess))
WordList[FakeWord.find(Guess)] = Guess
FakeWord = FakeWord.replace(Guess, "*", 1)
我改变了for循环条件,因为整数不能是迭代的范围。此外,您必须用一些占位符字符替换该字母。为什么?因为如果你把&#34;&#34;,字符串缩短为1,下一个字符将在同一个索引中。例如,当您键入&#39; t&#39;时,首先t在索引2处,第二个t在3处。用&#34;&#34;替换后 字母将变为leter,第二个t现在位于索引2. 所以你不想改变字符串的长度