raw_input() 会停止无限循环吗?

Does raw_input() stop an infinite while 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",程序会打印 Ok。你的心情是正常的。无数次。

但是如果我输入 "good",程序会打印 Ok。你心情正常。 并打印了 question_2 的内容。

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

得出 raw_input() 停止任何无限 while 循环的结论是否合理?

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 ?

没有。这不是 停止 循环;它正在主动阻止输入。一旦收到输入,它就不会再被阻塞(这就是为什么你从其他选择中得到无限文本的原因);这些分支中没有阻塞 I/O。

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

1:这个是如果确实是while True;如果它是 while state,它将停止迭代,因为 state 在随后的 运行 上是 False

一旦你回答 "good, the value returned by the second raw_input will be stored in variable question_2 rather than question. So variable question never changes again, but will remain " 好”。所以你会继续点击第二个 raw_input,无论你回答什么。它不会停止你的循环,而是暂停它直到你回答。我认为你也应该好好看看 Alfasin 的评论...

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

示例:

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