2017-04-22 7 views
1

助けてください!私はここでのエラーを理解していない。なぜ私は0、1、2以外の数字を入力すると「int 'オブジェクトが呼び出し可能でない」というエラーが出るのですか?代わりに、「あなたは正しくない番号を入力しました。もう一度やり直してください」と印刷し、質問に戻ることを想定しています。呼び出し可能でないPython Intオブジェクト

2番目の質問:文字を入力しても値エラーが発生せず、質問を再入力する方法でコードを変更するにはどうすればよいですか?ありがとうございました!

def player_action():   
    player_action = int(input("Enter 0 to stay, 1 to go Up, or 2 to go Down: ")) 

    if player_action == 0: 
     print ("Thank You, you chose to stay") 


    if player_action == 1: 
     print ("Thank You, you chose to go up") 

    if player_action == 2: 
     print ("Thank You, you chose to go down") 

    else: 
     print ("You have entered an incorrect number, please try again") 
     player_action() 

player_action() 
+3

あなたの変数名が関数名をシャドウ:

ここにあなたの参照のための完全なバージョンです。あなたは関数 'player_action()'を呼び出そうとしますが、実際には変数 'player_action'を呼び出しています。これはintです。関数と変数に同じ名前を使用しないでください! – Craig

+1

また、この関数を再帰的にする理由もありません。あなたが有効な入力を得てから、その入力で何かをするまで、 'while'ループを置くだけです。 – Craig

+0

ああありがとう! –

答えて

1

@Pedroロビトが@Craigが提案されているようwhileループを使用して、提案、そしてあなたもtry...exceptステートメントを含めることができますが、彼はそれを置いていたとして、@のpolarisfox64はそれをしない方法として、あなたは、変数名を変更する必要があります間違った場所に

def player_action():  
    while True: 
     try: 
      user_input = int(input("Enter 0 to stay, 1 to go Up, or 2 to go Down: ")) 
     except ValueError: 
      print('not a number') 
      continue 

     if user_input == 0: 
      print ("Thank You, you chose to stay")   

     if user_input == 1: 
      print ("Thank You, you chose to go up") 

     if user_input == 2: 
      print ("Thank You, you chose to go down") 

     else: 
      print ("You have entered an incorrect number, please try again") 
      continue 
     break 

player_action() 
0

ただ、機能の差分名に変数名player_actionを変更すなわち:

def player_action(): 
    user_input = int(input("Enter 0 to stay, 1 to go Up, or 2 to go Down: ")) 
    if user_input == 0: 
     print ("Thank You, you chose to stay") 
    elif user_input == 1: 
     print ("Thank You, you chose to go up") 
    elif user_input == 2: 
     print ("Thank You, you chose to go down") 
    else: 
     print ("You have entered an incorrect number, please try again") 
     player_action() 

player_action() 
1

あなたの質問への最初の答えは、ペドロによって回答されてきたが、第二の回答については、これを解決する必要がありexcept文試してみてください。

EDIT:申し訳ありませんええ、私は...ちょっとそれを台無しに、より良い答えがありますが、私はこの

を修正するための時間を取るべきであると思いました10
def player_action(): 
    try: 
     player_action_input = int(input("Enter 0 to stay, 1 to go Up, or 2 to go Down: ")) 
    except ValueError: 
     print("Non valid value") # or somehting akin 
     player_action() 
    if player_action_input == 0: 
     print ("Thank You, you chose to stay") 
    elif player_action_input == 1: 
     print ("Thank You, you chose to go up") 
    elif player_action_input == 2: 
     print ("Thank You, you chose to go down") 
    else: 
     print ("You have entered an incorrect number, please try again") 
      player_action() 

player_action() 
関連する問題