【问题标题】:Python Loop isnt working properlyPython 循环无法正常工作
【发布时间】:2014-04-05 17:39:24
【问题描述】:

我正在尝试创建一个游戏,用户输入字母直到他们猜出秘密单词,但由于某种原因,我的列表没有正确更新。 假设秘密单词是 TOYS,如果用户猜到 T,它会显示 T _ _ _ 然后用户输入 S 但单词仍然显示 T_ _ _,将 S 添加到 lettersInWord 列表中,并告诉用户 S 不是在这个词中。循环在 while 循环中运行,但问题发生在循环内部。

letter = input("Enter letter: ")
if letter not in enteredLetters:
    find = sentence.find(letter)
    if find == -1:
        print("Letter is not in word")
    else:
        newSentence = ""
        lettersInWord.append(letter)
        for letter in sentence:
            if letter in lettersInWord:
                newSentence = newSentence + letter 
            else:
                newSentence = newSentence + "_ "        
elif letter in enteredLetters:
    print ("The letter has been used")
print (newSentence)
enteredLetters.append(letter)

【问题讨论】:

  • 你没有初始化enteredLetters (enteredLetters = []) 还是只是被“删掉”了?
  • @DonCallisto:这显然不是问题所在。在这种情况下你会得到例外,这里不是这种情况。
  • @MartijnPieters:只是问,因为这可能会导致问题......
  • @DonCallisto 我已经初始化了循环外的所有变量,这不是问题,只是循环是
  • 你的句子是大写的吗?你能告诉我们sentence 变量中有什么吗?

标签: python list loops python-3.x


【解决方案1】:

您正在循环中重新绑定letter

for letter in sentence:
    if letter in lettersInWord:

letter 现在是sentence 中的一个字符,不是原始用户输入。在那个循环之后,它仍然会绑定到sentence 中的最后一个字符,所以'S'

在您的代码末尾,添加到enteredLetters 的是 this 字符(句子中的最后一个):

enteredLetters.append(letter)

所以enteredLetters 现在包含['S'] ['T']

您需要为循环变量选择一个不同的名称; char是一个常用的名字:

for char in sentence:
    if char in lettersInWord:
        newSentence = newSentence + char 
    else:
        newSentence = newSentence + "_ "        

【讨论】:

  • 我将如何更改名称可以我只是命名它..i.. 但是我将如何合并用户输入的字母?
  • @novicecoder:我已经向您展示了如何重命名循环中的变量。保持letter 中的用户输入不变。
  • 我这样做了,我用 char 替换了字母,但这也不起作用,因为它会将 T 添加到 lettersInWord 两次,如果我再次猜测它会将 T_ _ _ 更改为 O O _ _ 并将 O 两次添加到列表
  • @novicecoder:那你还在用newSentence + letter不是 newSentence + char
  • 非常感谢!它有效,但为什么它仍然两次将字母添加到列表中?
猜你喜欢
  • 2021-06-22
  • 2019-01-01
  • 2014-12-02
  • 2013-08-09
  • 2013-10-30
  • 2013-10-19
相关资源
最近更新 更多