Python - 我的while循环正在停止

时间:2012-09-18 02:35:49

标签: 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:
                    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)."

但偶尔如果我输入信件,程序将停止,不再需要更多输入。我究竟做错了什么?如果代码非常草率并且编写得很糟糕,我很抱歉,因为我是编程新手。感谢。

2 个答案:

答案 0 :(得分:6)

我不确定这是不是你得到的,但你的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_input,因为raw_input已经返回一个字符串。您定义了一个名为letters的变量,但从不使用它。

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

最后,请注意incount对子字符串进行操作,而不仅仅是单个字母。所以输入“yth”作为你的输入仍然会起作用并给出1的计数。这并不一定有任何问题,但你应该知道,虽然你要求信件,但是人们可以输入任何东西,以及子串任何长度仍然可以在“单词”中找到。

答案 1 :(得分:0)

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

  

循环1:在单词中找到输入时运行。

一旦这种情况失败,我们就会进入第2循环:

  

循环2:在单词中找不到输入时运行。

一旦这种情况失败,我们就会一直到程序结束。

所以,如果你输入一次“坏”输入,然后输入一次“好”输入,程序就会结束。

你想要做的是将两个循环包装成一个循环,并使用if-else来决定每个特定输入是什么。