0

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

我正在制作一个基本上要求 3 或 4raw_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。

编辑:为了更清楚一点,我仍然想无限循环(除了离开外壳会离开循环),我只想重新启动循环而不完成。IE,在制作许多产品时,您会陷入几个步骤的循环中。但是,如果你错误地执行了一个步骤,你就会扔掉有缺陷的产品并重新开始,而没有完成。

4

6 回答 6

1

嵌套ifs 可以正常工作,你也可以让它们更整洁:

if theInput == 'Acceptable Statement' or theInput == 'Another acceptable statement':
    if theSecondInput == 'Acceptable Statement' or theInput == 'Another acceptable statement':
        doThings()
        break

continue会做你需要的。我只是觉得上面的好看:)

于 2012-07-05T13:33:51.230 回答
0

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

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
于 2012-07-05T13:37:05.233 回答
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"
于 2012-07-05T13:38:00.030 回答
0

在循环中使用continue可以完成我想要的。它完美地工作!

于 2012-07-05T13:54:49.727 回答
0

您需要第二个循环并打破内部循环。像这样的东西:

while True:
  while True:
    # do some fancy stuff
    if (fancy stuff is uncool):
      break
  print "restart"

编辑:为您澄清这一点:您restartLoop()将是break. 并替换 if 语句的条件;)

于 2012-07-05T14:16:55.463 回答
-1

如果您有某种终止声明(“quit”或“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 级 问题:敲敲 预期反应:“谁在那儿?”、“我讨厌笑话。”、“什么?”

2级 问题:嘘!预期响应:“嘘谁?”、“停止”

3级 问题:噢,别哭!预期回复:“哈哈”、“不好笑”

于 2012-07-05T13:43:27.070 回答