Signaler

Récuper une valeur dans un dictionnaire [Résolu]

Posez votre question Cloé - Dernière réponse le 19 avril 2017 à 10:21 par mamiemando
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

Utile
+0
plus moins
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
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !