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 が間違っていると伝えるのではなく、ループを終了させたいと考えています。

EDIT:もう少し明確にするために、私はまだ無限にループしたい(シェルを離れるだけでループを離れます)、完了せずにループを再開したいだけです。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

2 番目のループが必要で、内側のループを中断します。このようなもの:

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 に答える
0

ループで使用continueすると、私が望むことが達成されます。それは完全に機能します!

于 2012-07-05T13:54:49.727 に答える
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
于 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 に答える
-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

入力と許容可能なステートメントをチェックするプライベート ワーカー メソッドを使用することもできます。次に、「if」を使用して入力を処理できます。また、質問のどの段階でどのような回答を期待しているかを保存したい場合もあるようです。例えば...

レベル 1 の質問: ノック ノック 予想される応答: 「誰がいるの?」、「冗談は嫌いだ」、「なに?」

レベル 2 の質問: ブー!予想される応答: 「ブー誰?」、「ストップ」

レベル 3 の質問: あら、泣かないで!予想される反応: 「はは」、「面白くない」

于 2012-07-05T13:43:27.070 に答える