Python对于循环问题非常奇怪

时间:2018-05-15 18:16:04

标签: python for-loop

出于某种原因,我的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,如果你能让整个过程保持完全相同的线数或更短,我会非常感激,因为我提出了一个比我的朋友更短的问题的解决方案,我想保持这种方式。 ; )

1 个答案:

答案 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. 所以你不想改变字符串的长度