Python-我的while循环正在自行停止

Python-我的while循环正在自行停止,python,while-loop,Python,While Loop,这是一个家庭作业问题,它要求“选择一个单词。让用户输入一个字母。检查字母在您的单词中出现了多少次,并在屏幕上输出数字。”到目前为止,我已经按原样写了它,它似乎工作得很好: word = str("python") letters = len(word) attempt = str(raw_input ("Enter a letter: ")) while attempt in word: count = "python".count(attempt) if attempt in

这是一个家庭作业问题,它要求“选择一个单词。让用户输入一个字母。检查字母在您的单词中出现了多少次,并在屏幕上输出数字。”到目前为止,我已经按原样写了它,它似乎工作得很好:

word = str("python")
letters = len(word)
attempt = str(raw_input ("Enter a letter: "))

while attempt in word:
    count = "python".count(attempt)
    if attempt in word:
                    print "This letter is present ",count, "time(s)."
    attempt = str(raw_input ("Enter another letter: "))

while attempt not in word:
    attempt = str(raw_input ("This letter is not present, enter another letter: "))
    count = "python".count(attempt)
    if attempt in word:
             print "This letter is present ",count, "time(s)."

但偶尔,如果我输入字母,程序将停止,不再接受任何输入。我做错了什么?我很抱歉,如果代码是非常草率和糟糕的编写,因为我是新的编程。谢谢。

我不确定这是否是您想要的,但是您的while循环将一个接一个地执行。它们并不是一直都适用。因此,第一个while意味着“只要用户输入单词中的字母,就继续这样做”,并且只要用户输入单词中的字母,循环就会继续执行。一旦用户输入一个不在单词中的字母,循环就会结束,事情就会转到第二个循环。执行将永远不会返回到第一个循环。同样,在第二个循环中,如果您输入单词中的字母,循环将结束。既然节目结束了,节目也就结束了

因此,如果您输入一个单词中没有的字母,然后输入一个单词中的字母,程序将结束。就像你先输入“x”,然后输入“y”,它就会停止

我认为你真正想要的是:

while True:
    attempt = raw_input("Enter a letter:")
    if attempt in word:
        print "That was in the word", word.count(attempt), "times"
    else:
        print "That was not in the word"
当然,该程序将无限循环,直到您按Ctrl-Break或类似键关闭它

您的代码还有一些其他问题。您不需要在
str
中包装“python”,因为它已经是一个字符串了。您也不需要将
raw\u input
包装成字符串,因为
raw\u input
已经返回了一个字符串。您定义了一个名为
letters
的变量,但从不使用它

此外,您在开始时定义了
word=“python”
,但随后有时会使用
word
变量,而有时会在代码中重新键入字符串“python”。这对这个程序来说并不重要,但一般来说,一次分配变量并在任何地方使用它是一个好主意;否则,如果您决定使用不同的单词,您将不得不在许多地方更改它,这会增加您忘记在一个地方更改它的可能性,从而导致错误


最后,请注意,中的
count
操作子字符串,而不仅仅是单个字母。因此,输入“yth”作为输入仍然有效,并给出1的计数。这不一定有什么问题,但是你应该知道,尽管你要的是字母,这个人可以输入任何东西,而且任何长度的子字符串都可以在“word”中找到。

我不确定这是否是你想要的,但是你的while循环会一个接一个地执行。它们并不是一直都适用。因此,第一个while意味着“只要用户输入单词中的字母,就继续这样做”,并且只要用户输入单词中的字母,循环就会继续执行。一旦用户输入一个不在单词中的字母,循环就会结束,事情就会转到第二个循环。执行将永远不会返回到第一个循环。同样,在第二个循环中,如果您输入单词中的字母,循环将结束。既然节目结束了,节目也就结束了

因此,如果您输入一个单词中没有的字母,然后输入一个单词中的字母,程序将结束。就像你先输入“x”,然后输入“y”,它就会停止

我认为你真正想要的是:

while True:
    attempt = raw_input("Enter a letter:")
    if attempt in word:
        print "That was in the word", word.count(attempt), "times"
    else:
        print "That was not in the word"
当然,该程序将无限循环,直到您按Ctrl-Break或类似键关闭它

您的代码还有一些其他问题。您不需要在
str
中包装“python”,因为它已经是一个字符串了。您也不需要将
raw\u input
包装成字符串,因为
raw\u input
已经返回了一个字符串。您定义了一个名为
letters
的变量,但从不使用它

此外,您在开始时定义了
word=“python”
,但随后有时会使用
word
变量,而有时会在代码中重新键入字符串“python”。这对这个程序来说并不重要,但一般来说,一次分配变量并在任何地方使用它是一个好主意;否则,如果您决定使用不同的单词,您将不得不在许多地方更改它,这会增加您忘记在一个地方更改它的可能性,从而导致错误


最后,请注意,
中的
count
操作子字符串,而不仅仅是单个字母。因此,输入“yth”作为输入仍然有效,并给出1的计数。这不一定有什么问题,但您应该知道,尽管您要求字母,但此人可以键入任何内容,并且在“word”中仍然可以找到任何长度的子字符串。

该程序有两个循环。一旦这些循环通过,程序就结束了

循环1:在word中找到输入时运行

一旦该条件失效,我们将进入循环2:

循环2:在word中找不到输入时运行

一旦这个条件失败了,我们就失败了,直到程序结束

因此,如果您输入一次“坏”输入,然后输入一次“好”输入,程序将结束


您要做的是将两个循环包装成一个循环,并使用if-else来确定每个特定输入是哪个。

该程序具有两个循环。一旦这些循环通过,程序就结束了

循环1:在word中找到输入时运行

一旦该条件失效,我们将进入循环2:

循环2:在word中找不到输入时运行

一旦这个条件失败了,我们就失败了,直到程序结束

因此,如果您在