2017-04-22 1 views
1

Aidez s'il vous plaît! Je ne comprends pas l'erreur ici. Pourquoi ai-je une erreur disant: "l'objet 'int' n'est pas appelable" quand je tape un nombre autre que 0, 1 ou 2? Au lieu de cela, il est supposé d'imprimer "Vous avez entré un nombre incorrect, s'il vous plaît essayez à nouveau" et revenir à poser la question.Python Int objet non appelable

Deuxième question: Comment puis-je modifier le code de manière à ce que même si je tape des caractères alphabétiques, cela ne me donne pas l'erreur de valeur et continue de poser à nouveau la question? Je vous remercie!

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

ombres Votre nom variable, le nom de la fonction. Vous essayez d'appeler la fonction 'player_action()' mais vous appelez en fait la variable 'player_action', qui est un int. N'utilisez pas le même nom pour la fonction et la variable! – Craig

+1

En outre, il n'y a aucune raison de rendre cette fonction récursive. Mettez juste une boucle 'while' jusqu'à ce que vous obteniez une entrée valide, puis faites quelque chose avec cette entrée. – Craig

+0

oh d'accord merci! –

Répondre

1

Vous devez modifier le nom de la variable comme @Pedro suggère Lobito, utiliser une boucle while comme @Craig suggéré, et vous pouvez également inclure la déclaration try...except, mais pas la façon @ polarisfox64 fait comme il l'avait placé au mauvais endroit.

est ici la version complète pour votre référence:

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

Il suffit de changer le nom de la variable player_action à un nom diff de la fonction, à savoir:

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

La première réponse à votre question a été répondu par Pedro, mais comme pour la deuxième réponse, une essayez except devrait résoudre ceci:

EDIT: Oui désolé, je foiré un peu ... il y a de meilleures réponses, mais je pensais que je devrais prendre le temps de résoudre ce problème

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()