如果没有工作要做,我的循环如何回到寻找输入?
我正在创建一个基本上要求3或4个raw_input
行的脚本,然后根据这些行做一些工作,并无限循环。但是,raw_input
行是选择(我正在寻找他们键入一些语句之一)。而不是一堆布尔和while循环,以确保它是一个可接受的陈述,我认为简单地做这样的事情可能更容易和更清洁:
if theInput != 'Acceptable Statement' and theInput != 'Another acceptable statement':
restartLoop()
if theSecondInput != 'Acceptable Statement' and theInput != 'Another acceptable statement':
restartLoop()
依此类推,我需要的每一个输入。它将中止当前循环并重新启动另一个循环,就像它已经完成一样。由于在收集和批准所有数据之前实际上没有发生任何事情,因此不应该导致任何问题。我意识到这是另一种选择:
if theInput == 'Acceptable Statement' or theInput == 'Another acceptable statement':
if theSecondInput == 'Acceptable Statement' or theInput == 'Another acceptable statement':
doThings()
else:
doNothing()
else:
doNothing()
但是,我想在输入用户出错后结束循环,而不是向他们提出5个问题并最终告诉他们他们错了#2。
编辑:为了更清楚一点,我仍然想要无限循环(除了让shell离开循环之外什么都没有),我只想重新启动循环而不完成。 IE,当制作许多产品时,你只需几步即可完成循环。但是,如果你错误地执行了一个步骤,你就会抛弃有缺陷的产品并重新开始而不会完成。答案 0 :(得分:1)
嵌套的if
可以正常工作,你也可以把它们做得更整洁:
if theInput == 'Acceptable Statement' or theInput == 'Another acceptable statement':
if theSecondInput == 'Acceptable Statement' or theInput == 'Another acceptable statement':
doThings()
break
但是continue
会做你需要的。我只是发现上面看起来更漂亮了:))
答案 1 :(得分:0)
while True:
//getInput
if theInput != AcceptableInput:
print "Input 1 is wrong."
continue
//getInput
if theInput != AcceptableInput:
print "Input 2 is wrong."
continue
//getInput
if theInput != AcceptableInput:
print "Input 3 is wrong."
continue
//getInput
if theInput != AcceptableInput:
print "Input 4 is wrong."
continue
//getInput
if theInput != AcceptableInput:
print "Input 5 is wrong."
continue
break
答案 2 :(得分:0)
下面应该足以做你想做的事情(请注意,除了next
和字符串之外,所有对象都已组成。)
print "Instructions"
while True:
userresponse = get_some_input()
if isAcceptable(userresponse):
store(userresponse)
print "Good job"
print next(prompts)
else:
print "Awful job"
答案 3 :(得分:0)
在循环中使用continue
可以实现我想要的效果。它完美无缺!
答案 4 :(得分:0)
你需要第二个循环并打破内循环。像这样:
while True:
while True:
# do some fancy stuff
if (fancy stuff is uncool):
break
print "restart"
修改:为此澄清一下:您的restartLoop()
将是break
。并替换if语句的条件;)
答案 5 :(得分:-1)
如果您有某种终止声明(“退出”或“q”),我会建议类似的内容:
while( input != "q" || "quit")
if statement == "acceptable statement"
doStuff()
if statement != "acceptable statement"
//output error
input = "q" //this will terminate the loop
您甚至可以使用私有工作方法来检查输入与可接受的语句。然后你可以让你的“ifs”来处理输入。您似乎也希望在问题的哪个阶段存储您期望的答案。例如......
等级1 问题:Knock Knock 预期的答复:“谁在那里?”,“我讨厌笑话。”,“什么?”
等级2 问题:嘘! 预期的答复:“嘘谁?”,“停止”
等级3 问题:噢,别哭! 预期回复:“哈哈”,“不好笑”