2016-09-16 12 views
0

私はこの管理された評価をしています。私はちょうど初心者なので、私はあまりPythonについて知らない。最初に値が正しい場合に1回実行されるループを修正する方法。しかし、第1の値が間違っていて、第2の値が正しい場合、永久に実行されます。

# defining qualification 
def qualification(): 
    print("\nQualification Level") # informs user what is AP + FQ 
    print('\n"AP" = Apprentice', '\n"FQ" = Fully-Qulaified') 

    user_qual = input("Enter your Qualification Level") 

    # error message if any other data is entered 
    while user_qual not in ("AP", "FQ"): 
     print("You have entered one or more data wrong!") 
     print("Please re-enter Qualification Level!") 
     qualification() 

このコードが実行されるたび、それはwhileループまで良い実行されます。

私はこのコードを持っています。正しい値(つまりAPまたはFQ)を入力してコードを実行すると、whileループは実行されません。しかし、間違った値を最初に入力した場合(FQまたはAPでない値)whileループは実行する必要がありますが、最初に実行した後は間違った値を入力した後に正しい値を入力すると終了しますループはループを停止しません。無限ループが作成されています。

答えを提供してください。私はPythonプログラミングの初心者ですので、解決策が複雑すぎないようにしてください。

+0

あなたの変数は関数ローカル変数 "user_qual"なので、関数への各再帰呼び出しでこの変数は一意です。あなたのコードによれば、この変数は決して変更されません。しかしここでの主な質問は、再帰が必要な理由です。あなたのwhileループで変数を更新するだけで、 "qualification"への呼び出しをuser_qual = input( "あなたの資格レベルを入力")に置き換えてください – Alex

答えて

0

間違った場所で再帰を使用しようとしました。

ユーザの入力が初めて間違っていると、正しい入力を入力する(または入力する)ことができます。

しかし、それは終了し、user_qual変数がまだ無限ループに終わっている再帰のレベルに戻ります。

注:異なる再帰レベルで実行されている場合、変数は同じではありません。あなたは別のローカルスコープに入っています。プログラムを続行する前に、スコープについて少し調べたいと思うかもしれません。


だから、だけではなく、入力再び、最後の行にqualification()に呼び出す:

while user_qual not in ("AP", "FQ"): 
    print("You have entered one or more data wrong!") 
    user_qual = input("Please re-enter Qualification Level!") 

は、別の解決策は、関数の先頭で、最初にglobal user_qualを使用することになりますループのあなたがそうするつもりならば、Pythonのグローバル変数について読んでください。

関連する問題