3
votes

Comment résoudre un problème avec input () en python?

Je crée mon premier programme sur python. L'objectif est d'obtenir une sortie du coût du voyage. Dans le code ci-dessous, je veux que python génère une erreur et demande à l'utilisateur de réessayer si l'entrée ne fait pas partie du dictionnaire.

J'ai essayé d'utiliser while True mais lorsque j'utilise le code, cela me fait réessayer sur une mauvaise entrée mais ne jette pas une erreur en informant l'utilisateur.

c = {"Charlotte": 183, "Tampa": 220, "Pittsburgh": 222, "Los Angeles": 47}

def plane_ride_cost():
    city = ''
    while True:
        city = input("Name of the city: ")
        if  city in c.keys():
            return c[city]
            break
    else:
        print ("Invalid input please try again")

plane_ride_cost()

Output:
Name of the city: Hyderabad
Name of the city: 

si vous remarquez qu'il prend l'entrée et me demande ensuite de réessayer sans l'indication.


4 commentaires

Où est dict 'c'?


Vous pouvez supprimer le break car l'utilisation d'un return vous fait déjà sortir de la boucle, vous n'avez pas non plus besoin d'initialiser city = '' car l'écrasera juste après avec votre entrée.


Double possible de la clause Else sur l'instruction while Python


Salut Guimoute a essayé ce que vous avez mentionné ne fonctionne toujours pas


3 Réponses :


1
votes

J'ai donc copié votre code et l'ai exécuté. Le seul problème avec celui-ci était ce retrait, donc en gros, j'ai corrigé cela:

 c = {"Charlotte": 183, "Tampa": 220, "Pittsburgh": 222, "Los Angeles": 47}
 def plane_ride_cost():
     city = ''
     while True:
         city = input("Name of the city: ")
         if  city in c.keys():
             return c[city]
             break
         else:
             print ("Invalid input please try again")

plane_ride_cost()

Lors de l'exécution, si vous saisissez "Arizona", par exemple, il renvoie "Entrée non valide, veuillez réessayer" , et si vous entrez les noms dans le dictionnaire, il renvoie la valeur du dictionnaire.

Explication:

Python utilise l'indentation pour structurer le code. Dans votre exemple, else est aligné sur while , il fait donc partie de l'instruction while et est exécuté en quittant normalement while boucle (pas avec break).

Vous voulez que le else soit aligné avec if , afin qu'il soit exécuté à chaque fois à travers la boucle, si la condition if ( city in c.keys () ) n'est pas True.


0 commentaires

1
votes

Vous pouvez également le faire avec la récursivité de queue.

c = {"Charlotte": 183, "Tampa": 220, "Pittsburgh": 222, "Los Angeles": 47}

def plane_ride_cost():
    city = input("Name of the city: ")
    if city in c:     #try:
        return c[city]
                      #except:
    print ("Invalid input please try again")
    plane_ride_cost()

plane_ride_cost()


0 commentaires

1
votes

Une autre solution, dans l'esprit de plus facile de demander pardon que permission :

def plane_ride_cost():
    while True:
        city = input("Name of the city: ")
        try:
            return c[city]
            break
        except KeyError:
            print ("Invalid input please try again")

plane_ride_cost()

try bloque les tentatives d'exécuter simplement la ou les lignes, sans vérifier si l'entrée est correcte.

Si cela fonctionne, le bloc sauf est ignoré.

S'il y a une KeyError , ce qui se produit si la clé city n'existe pas dans c , il sera attrapé par le bloc sauf . Au lieu de planter le programme, la ou les lignes du bloc sauf sont exécutées.

Vous pouvez avoir plusieurs blocs sauf pour intercepter différents exceptions.


0 commentaires