Récuper une valeur dans un dictionnaire

Résolu
Cloé -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Je me forme au python et je bloque sur le point suivant.
Mon code:

def poid_espace():
 encore = 'Oui'
 while encore =='Oui':
  print("Quel est ton poid sur terre?")
  poid = int(sys.stdin.readline())
  planet = {'Lune': 16.2, 'Terre': 100, 'Venus': 150,'Neptune':80}
  print("sur quel planet est tu? Lune, Terre, Venus ou Neptune")
  planet_choix = str(sys.stdin.readline())
  poid_cacluler = poid * (planet[planet_choix])/100
  print ('ton poids sur %S est de %S'% (planet_choix, poid_calculer))
  print('nouveau calcule? Oui/Non')
  encore = str(sys.stdin.readline())


Le problème vient de la ligne
poid_cacluler = poid * (planet[planet_choix])/100


Je récupère le nom est pas la valeur associée. Si vous avez une idée de la syntaxe.
Mercie d'avance

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour

    Ton erreur vient du fais que quand tu lis la ligne tapée par l'utilisateur, celle-ci contient le retour à la ligne (caractère
    \n
    ), qui ne figure pas dans les clés de ton dictionnaire.

    (mando@velvet) (~) $ python toto.py 
    Quel est ton poid sur terre?
    30
    sur quel planet est tu? Lune, Terre, Venus ou Neptune
    Venus
    Traceback (most recent call last):
    File "toto.py", line 16, in <module>
    poid_espace()
    File "toto.py", line 11, in poid_espace
    poid_cacluler = poid * (planet[planet_choix])/100
    KeyError: 'Venus\n'


    Ensuite il y a plusieurs autres erreurs :
    - tu as utilisé
    %S
    au lieu de
    %s
    ,
    - tu as fait des fautes de frappes dans tes variables
    - La variable "encore" devrait être un booléen.

    Moins gênant, mais à améliorable :
    - Tu peux ajouter l'en-tête "#! -*- coding: utf-8 -*-" pour supporter les caractères accentués dans ton code.
    - Le dictionnaire n'a pas besoin d'être recréé à chaque tour de boucle.
    - Il y a beaucoup de fautes d'orthographe :-/
    - Les casts en
    str
    ne sont pas utiles.
    - Il faudrait contrôler le cas où l'utilisateur tape un nom de planète non référencé dans ton dictionnaire.
    - On pourrait rendre la saisie de l'utilisateur insensible à la casse (minuscule/majuscule).

    #!/usr/bin/env python
    #! -*- coding: utf-8 -*-
    
    import sys
    
    def poids_espace():
        planetes = {
            "lune" : 16.2,
            "terre" : 100,
            "venus" : 150,
            "neptune" : 80
        }
    
        noms = ", ".join([planete.title() for planete in planetes.keys()])
        encore = True
    
        while encore == True:
            print("Quel est ton poids sur Terre?")
            poids = int(sys.stdin.readline())
            print("Sur quelle planète es-tu ? %s" % noms)
            planete_choix = sys.stdin.readline().strip().lower()
    
            try:                                   
                poids_calcule = poids * (planetes[planete_choix]) / 100
            except KeyError:
                print("Planète inconnue !")
                continue
    
            print ("Ton poids sur %s est de %s" % (planete_choix, poids_calcule))
            print("Nouveau calcul ? Oui/Non")
            encore = bool(sys.stdin.readline().strip().lower() == "oui")
    
    poids_espace()


    Bonne chance
    0