2017-04-22 2 views
1

Bitte helfen! Ich verstehe den Fehler hier nicht. Warum bekomme ich einen Fehler, der besagt: "'int' Objekt ist nicht aufrufbar", wenn ich eine andere Zahl als 0, 1 oder 2 eintippe? Stattdessen wird angenommen, dass Sie "Sie haben eine falsche Nummer eingegeben haben, bitte versuchen Sie es erneut" auszugeben, und gehen Sie zurück, um die Frage zu stellen.Python Int Objekt nicht aufrufbar

Zweite Frage: Wie kann ich den Code auf eine Weise ändern, dass selbst wenn ich Buchstabenzeichen eintippe, es mir nicht den Wert Fehler geben und die Frage erneut stellen? Vielen Dank!

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

Ihre Variablennamen shadows den Funktionsnamen. Sie versuchen, die Funktion 'player_action()' aufzurufen, rufen aber tatsächlich die Variable 'player_action' auf, die ein int ist. Verwenden Sie nicht denselben Namen für die Funktion und die Variable! – Craig

+1

Außerdem gibt es keinen Grund, diese Funktion rekursiv zu machen. Setzen Sie einfach eine "while" -Schleife, bis Sie eine gültige Eingabe erhalten und dann etwas mit dieser Eingabe machen. – Craig

+0

oh okay danke! –

Antwort

1

Sie sollten die Variablennamen ändern @Pedro Lobito vorschlagen, verwenden Sie eine while Schleife als @Craig vorgeschlagen, und Sie können auch die try...except Aussage, aber nicht die Art und Weise @ polarisfox64 es getan, wie er es war gelegt an der falschen Stelle.

ist die komplette Version für Ihre Referenz:

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

Ändern Sie einfach den Variablennamen player_action zu einem diff Namen der Funktion, das heißt:

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

Die erste Antwort auf Ihre Frage wurde von Pedro beantwortet, aber wie für die zweite Antwort, ein versuchen, außer Anweisung sollte dieses Problem lösen:

EDIT: Ja sorry, ich messed es sich ein wenig ... es gibt bessere Antworten, aber ich dachte, dass ich die Zeit nehmen, sollten diese

zu beheben 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() 
Verwandte Themen