Python : convertisseur de devise
Fermé
BOAA
-
Modifié le 26 janv. 2022 à 11:58
mamiemando Messages postés 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 - 26 janv. 2022 à 17:34
mamiemando Messages postés 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 - 26 janv. 2022 à 17:34
A voir également:
- Python : convertisseur de devise
- Citizen code python - Accueil - Outils
- Trouver la position d'un élément dans une liste python ✓ - Forum Python
- Ce programme est écrit en python ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
5 réponses
jee pee
Messages postés
40415
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 novembre 2024
9 411
Modifié le 26 janv. 2022 à 12:29
Modifié le 26 janv. 2022 à 12:29
Bonjour,
Sur le forum pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
J'effectue le changement sur ton message.
L'indentation est primordiale dans python. Et un bloc de lignes alignées sur une indentation dépend d'une entête de bloc qui se termine par :
IF est une commande entête de bloc, donc tous les IF doivent se terminer par : comme ELSE, WHILE, FOR ...
Sur le forum pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature (C, Python, Shell, ...).
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
J'effectue le changement sur ton message.
L'indentation est primordiale dans python. Et un bloc de lignes alignées sur une indentation dépend d'une entête de bloc qui se termine par :
IF est une commande entête de bloc, donc tous les IF doivent se terminer par : comme ELSE, WHILE, FOR ...
jee pee
Messages postés
40415
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 novembre 2024
9 411
26 janv. 2022 à 12:04
26 janv. 2022 à 12:04
Il faudrait que toi tu réinsères ton code. Car après application des balises je ne sais pas si cela correspond bien à ton source dans la question.
SI oui, tu as un problème général de compréhension de la présentation d'un source Python. La ligne 5 devrait être alignée sur la marge, comme la 3, la 9 aussi ...
Et ton code se termine par return conversion, comme si c'était une fonction, alors qu'a priori non.
SI oui, tu as un problème général de compréhension de la présentation d'un source Python. La ligne 5 devrait être alignée sur la marge, comme la 3, la 9 aussi ...
Et ton code se termine par return conversion, comme si c'était une fonction, alors qu'a priori non.
jee pee
Messages postés
40415
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
4 novembre 2024
9 411
Modifié le 26 janv. 2022 à 12:32
Modifié le 26 janv. 2022 à 12:32
Il y a véritablement beaucoup de soucis dans ton source.
str() convertit une variable en une chaine de caractère
Sur un input, on récupère une chaine donc str(currency) n'est pas nécessaire
str(USD) là tu essayes de convertir la variable USD, qui n'existe pas, en une chaine. On devrait juste avoir
C'est bizarre tu n'utilises pas le message2 ;-)
Au final oui il te faudrait utiliser un try exception. Mais si tu veux bien, avant d'en arriver là, il faudrait faire le programme tout simple sans. Afin de bien dérouler une logique basique de programmation. Et après on regarde comment insérer les tests sur le nombre EUR
str(currency) == str(USD)
str() convertit une variable en une chaine de caractère
Sur un input, on récupère une chaine donc str(currency) n'est pas nécessaire
str(USD) là tu essayes de convertir la variable USD, qui n'existe pas, en une chaine. On devrait juste avoir
if currency == "USD" :
C'est bizarre tu n'utilises pas le message2 ;-)
Au final oui il te faudrait utiliser un try exception. Mais si tu veux bien, avant d'en arriver là, il faudrait faire le programme tout simple sans. Afin de bien dérouler une logique basique de programmation. Et après on regarde comment insérer les tests sur le nombre EUR
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
26 janv. 2022 à 17:11
26 janv. 2022 à 17:11
Bonjour,
Il manque une parenthèse fermante là-dedans, non ? ....
if str(currency == str(YEN)
Il manque une parenthèse fermante là-dedans, non ? ....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33334
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 novembre 2024
7 801
Modifié le 26 janv. 2022 à 17:34
Modifié le 26 janv. 2022 à 17:34
Bonjour,
Il y a beaucoup d'erreur de syntaxe, donc voici à quoi pourrait ressembler ton programme une fois corrigé :
Les principaux changements :
Tu peux aussi utiliser un dictionnaire pour rendre ton code plus élégant et lever des exceptions.
Bonne chance
Il y a beaucoup d'erreur de syntaxe, donc voici à quoi pourrait ressembler ton programme une fois corrigé :
import sys def convert(): euros = float(input("Euros ?")) if euros <= 0: error_message = 'Error: your input should be a positive number' print(error_message1, file=sys.stderr) return None prompt = "enter a currency (YEN|USD|GBP|INR|CARD)" currency = input(prompt) if currency == "YEN": rate = 8.09647 elif currency == "USD": rate = 1.18468 elif currency == "GBP": rate = 0.925698 elif currency == "INR": rate = 87.0200 elif currency == "CAD": rate = 1.56086 else: rate = None if rate is None: error_message2 = 'Error: select one of the given currency (YEN / USD / CAD / GBP / INR)' print(error_message2, file=sys.stderr) return None conversion = euros * rate print(f"Your input is equal to {conversion}") return conversion x = convert() print(x)
Les principaux changements :
- Il manquait beaucoup de
:
après lesif ...
; - Il est inutile de transformer le résultat de input en
str
, c'est déjà unestr
. - Il y a confusion entre nom de variable et chaîne de caractère. Ici tu veux comparer <cod pythone>currency</code> à la chaîne de caractère
"YEN"
, donc à moins d'avoir défini une variableYEN = "YEN"
, déterminercurrency == YEN
n'a pas de sens car la variableYEN
n'est pas définie. - J'ai déplacé les variables
error_message
. Personnellement, je ne les aurais pas définies, et j'aurais directement écrit :
print('Error: your input should be a positive number', file=sys.stderr)
Tu peux aussi utiliser un dictionnaire pour rendre ton code plus élégant et lever des exceptions.
import sys MAP_CURRENCY_RATE = { "YEN" : 8.09647, "USD" : 1.18468, "GBP" : 0.925698, "INR" : 87.0200, "CAD" : 1.56086, } def convert(map_currency_rate = MAP_CURRENCY_RATE): euros = float(input("Euros ?")) if euros <= 0: raise RuntimeError("Error: your input should be a positive number") prompt = f"enter a currency ({'|'.join(map_currency_rate.keys())})" currency = input(prompt) rate = map_currency_rate.get(currency) if rate is None: raise RuntimeError(f'Error: select one of the given currency {" / ".join(map_currency_rate.keys())}') conversion = euros * rate print(f"Your input is equal to {conversion}") return None try: x = convert() print(x) except RuntimeError as e: print(e, file=sys.stderr)
Bonne chance