raw_input()是否会停止无限循环?

时间:2015-07-12 07:20:22

标签: python while-loop infinite-loop

下面有一个包含while循环的小代码。

question = raw_input("How are you? > ")
state = True
number = 0
print "Hello"

while True:
    if question == "good":
        print "Ok. Your mood is good."
        state = False
        question_2 = raw_input("How are you 2? > ")
    elif question == "normal":
        print "Ok. Your mood is normal."
    elif question == "bad":
        print "It's bad. Do an interesting activity, return and say again what your mood is."
    else:
        print "Nothing"

如果我输入“normal”,程序会打印确定。你的心情很正常。无数次。

但如果我输入“good”,程序会打印 Ok。你的心情很正常。并打印出question_2的内容。

为什么question_2 = raw_input("How are you 2? > ")中的问题不会重复无数次?

可以合理地断定raw_input()会阻止任何无限循环吗?

4 个答案:

答案 0 :(得分:2)

没有。它不是停止循环;它积极阻止输入。收到输入后,它将不再被阻止(这就是你从其他选择中获得无限文本的原因);这些分支中没有阻塞I / O.

您没有从选项1获得大量文本输出的原因是由于它的评估方式。在循环内部,question永远不会改变,因此总是将评估为"good",并会不断向您询问第二个问题 1

1:如果它确实是while True;如果它是while state,则由于state在后​​续运行中False而停止迭代。

答案 1 :(得分:0)

一旦你回答好了,第二个raw_input返回的值将存储在变量question_2而不是问题中。所以变量问题永远不会再改变,但仍然会保持良好的状态。因此,无论你回答什么,你都会继续击中第二个raw_input。它不会阻止你的循环,而是暂停它直到你回答。而且我认为你也应该好好看看阿尔法辛的评论......

答案 2 :(得分:0)

您可以通过elseelif使用break作为输出来停止无限循环。希望有所帮助! :d

示例:

while True:
    if things:
        #stuff
    elif other_things:
        #other stuff
    #maybe now you want to end the loop
    else:
        break 

答案 3 :(得分:-1)

raw_input()不会破坏循环。它只是等待输入。并且,当question未被第二个raw_input()覆盖时,您的if数据块将始终以good为止。

一种不同的方法:

answer = None

while answer != '':
    answer = raw_input("How are you? (enter to quit)> ")
    if answer == "good":
        print( "Ok. Your mood is good.")
    elif answer == "normal":
        print( "Ok. Your mood is normal.")
        # break ?
    elif answer == "bad":
        print( "It's bad. Do an interesting activity, return and say again what your mood is.")
        # break ?
    else:
        print( "Nothing")
        # break ?