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.
3 Réponses :
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.
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()
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.
Où est dict 'c'?
Vous pouvez supprimer le
break
car l'utilisation d'unreturn
vous fait déjà sortir de la boucle, vous n'avez pas non plus besoin d'initialisercity = ''
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