2017-09-08 6 views
1

私はちょうど出発しており、これを理解することはできません。条件が満たされたときにプログラムを終了する

私は学校で簡単な計算をするためのプログラムを書いています。

1からXまでの単純な数値を入力することで、異なる計算にアクセスすることができます。すべての数値はその計算のために関数を呼び出します。

私の問題は次のとおりです。 数字の入力を求められたときに空の文字列を入力すると、プログラムはユーザーに閉じる前に一定の時間数値を入力するように求めます。ここに私のコード:

def pick_procedure(): 
    procedure = raw_input("> ") 

    if not procedure: 
     counter = 0 
     print "Enter a value. " 

     while counter <4: 
      counter = counter + 1 
      main() 
      if counter == 4: 
       break 

def main(): 
    print "\nStudy helper 1.0.\n" 
    print """Procedure list: 

    1.Area of circle. 
    2. Circumference of a circle. 

    Please pick a procedure: """ 
    pick_procedure() 

main() 

空の文字列が何回入力されても、プログラムは終了しません。

正しく、きれいにするにはどうすればいいですか?

+2

確かに、内部関数は内部関数を呼び出すmainを呼び出します。ある時点で、100万アクティブな '' 'pick_procedure()' '関数があります(何も残っておらず、終了していません)。 – sascha

答えて

0

あなたは悪質なサークルを作成しました。

このプロシージャが初めてfalseになると、pick_procedureはmainとmainコールを再度呼び出します。それは再帰的に続く。

イベントが発生したときにプログラムを終了したい場合は、sys.exit(0)を使用して問題を解決できます。

1

あなたが言うように、あなたはあなたのコードを再編成する必要があります。

def pick_procedure(valid_choices): 
    print "Enter a value. " 

    for _ in range(4): # prompt for a choice up to 4 times 
     choice = raw_input("> ") 

     if choice in valid_choices: 
      return choice 

    return None # A valid choice was not entered 


def main(): 
    print "\nStudy helper 1.0.\n" 
    choice = 1 

    while choice: 
     print """Procedure list: 

1. Area of circle. 

2. Circumference of a circle. 

Please pick a procedure: """ 

     choice = pick_procedure(["1", "2"]) 

     if choice: 
      print "Doing choice", choice 

main() 

次のようなアプローチが有効な選択が入力された場合while choiceループの使用を促し保つことができます。何も選択項目が入力されていない場合、pick_procedure()関数はNoneを返して、whileループを正常終了させます。有効な選択肢が入力された場合、その選択肢が戻されます。

また、有効な応答のリストを関数に渡すと、有効な応答の別のリストを渡すだけで他の質問にも使用できます。

関連する問題