下面有一个包含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()
会阻止任何无限循环吗?
答案 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)
您可以通过else
或elif
使用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 ?