我的程序如何返回循环的第一个命令?

时间:2012-07-05 13:30:34

标签: python loops

如果没有工作要做,我的循环如何回到寻找输入?

我正在创建一个基本上要求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,当制作许多产品时,你只需几步即可完成循环。但是,如果你错误地执行了一个步骤,你就会抛弃有缺陷的产品并重新开始而不会完成。

6 个答案:

答案 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)

您可以使用continuebreak来控制循环的流程。

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 问题:噢,别哭! 预期回复:“哈哈”,“不好笑”