2016-12-04 12 views
-2

私はPython関数を書いてユーザー入力を収集し、それをdictとして返します。 入力は特定の基準を満たす必要があります。そのためにチェックし、チェックアウトしない場合は入力を再入力するようユーザーに依頼します。 これは私のコードです:私のPython関数 '何もない'ループ '

def getIDs(stageid=0): 
    if stageid == 0: 
     stageid = input("Please supply stageID: ") 
     if (len(stageid) < 4 or len(stageid) > 5) or not stageid.isdigit(): 
      print("Wrong stageID, try again.") 
      getIDs() 
    raceid = input("Please supply the raceID: ") 
    if (len(raceid) < 1 or len(raceid) > 3) or not raceid.isdigit(): 
     print("Wrong raceID, try again.") 
     getIDs(stageid) 
    else: 
     # print(stageid) 
     return {"stageid": stageid, "raceid": raceid} 

私は何をするstageidが正しくない場合、関数はちょうど自分自身を呼び出すようですが、私は場合は、再度再入力stageidに持っているユーザーをしたくありませんraceidが間違っているので、raceidが間違っていると、私はstageidをパラメータとして関数を呼び出します。 しかし、私がstageidを何度か間違えてしまったら、それを正しいものにしてレイドに続けると、stageidに入って何度もレースを頼むことになるのは私の問題です。なぜ私は理解できません。コメント付きのprint関数は、指定されたすべてのstageidを逆順に出力します。最後に、戻り値には、最初に指定された(間違った)stageidとraceidが含まれます。

誰かがなぜPythonが何とかすべての値をループする理由を知っていますか?再帰関数を呼び出すときに終了がそのインスタンスを終了しますので

Vasilis

+0

インデントが壊れているため、修正してください。 –

+1

そして答えは、関数が "再起動"しないということです。再帰関数として呼び出すだけです。終了すると、 'getIDs()'コールから実行を続けます。これは修正される可能性がありますが、このアプローチはPythonにとっては非常に不十分です。 –

+0

この場合再帰を使うとほとんど頭痛を覚えるでしょうが、 'return getIDs()'がなければ、getIDの呼び出しは 'None'を返します。 –

答えて

0

ちょうどreturn文を追加します。

def getIDs(stageid=0): 
    if stageid == 0: 
     stageid = input("Please supply stageID: ") 
     if (len(stageid) < 4 or len(stageid) > 5) or not stageid.isdigit(): 
      print("Wrong stageID, try again.") 
      return getIDs() 
    raceid = input("Please supply the raceID: ") 
    if (len(raceid) < 1 or len(raceid) > 3) or not raceid.isdigit(): 
     print("Wrong raceID, try again.") 
     return getIDs(stageid) 
    else: 
     # print(stageid) 
     return {"stageid": stageid, "raceid": raceid} 
関連する問題