Python : convertisseur de devise
Bonjour,
Je débute sur python et je cherche à créer un programme qui, en entrée demande une somme en euro, et la devise dans laquelle convertir cette somme, et qui affiche en sortie la somme convertie dans la devise demandée. J'ai écrit le code ci-dessous mais cela m'indique "invalid syntax" pour la première boucle if. Merci d'avance pour votre aide !
Je débute sur python et je cherche à créer un programme qui, en entrée demande une somme en euro, et la devise dans laquelle convertir cette somme, et qui affiche en sortie la somme convertie dans la devise demandée. J'ai écrit le code ci-dessous mais cela m'indique "invalid syntax" pour la première boucle if. Merci d'avance pour votre aide !
error_message = 'Error: your input should be a positive number' error_message2 = 'Error: select one of the given currency (YEN / USD / CAD / GBP / INR)' prompt = "enter a currency" EUR = input() currency = input(prompt) if str(currency == str(YEN) rate = 8.09647 elif str(currency) == str(USD) rate = 1.18468 elif str(currency) == str(GBP) rate = 0.925698 elif str(currency) == str(INR) rate = 87.0200 elif str(currency) == str(CAD) rate = 1.56086 try: conversion = float(EUR)*rate if float(EUR) <= 0: print(error_message) return print("Your input is equal to ") return conversion except: print(error_message) return return conversion
A voir également:
- Python : convertisseur de devise
- Citizen code python avis - Accueil - Outils
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Mot secret python pix ✓ - Forum Python
- Python par la pratique : 101 exercices corrigés pdf - Forum Python
- Exercice python - Forum Python
5 réponses
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 ...
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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