Je crée un programme de base qui utilisera une interface graphique pour obtenir le prix d'un article, puis 10% de réduction sur le prix si le prix initial est inférieur à 10 ou 20% sur le prix si le prix initial est supérieur à dix:
import easygui
price=easygui.enterbox("What is the price of the item?")
if float(price) < 10:
easygui.msgbox("Your new price is: $"(float(price) * 0.1))
Elif float(price) > 10:
easygui.msgbox("Your new price is: $"(float(price) * 0.2))
Je reçois toujours cette erreur:
easygui.msgbox("Your new price is: $"(float(price) * 0.1))
TypeError: 'str' object is not callable`
Pourquoi ai-je cette erreur?
Vous essayez d'utiliser la chaîne en tant que fonction:
"Your new price is: $"(float(price) * 0.1)
Parce qu'il n'y a rien entre le littéral de chaîne et la parenthèse (..)
, Python interprète cela comme une instruction pour traiter la chaîne comme un appelable et l'invoquer avec un argument:
>>> "Hello World!"(42)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
Il semble que vous ayez oublié de concaténer (et d'appeler str()
):
easygui.msgbox("Your new price is: $" + str(float(price) * 0.1))
La ligne suivante doit également être corrigée:
easygui.msgbox("Your new price is: $" + str(float(price) * 0.2))
Vous pouvez également utiliser la mise en forme des chaînes avec str.format()
:
easygui.msgbox("Your new price is: ${:.2f}".format(float(price) * 0.1))
easygui.msgbox("Your new price is: ${:.2f}".format(float(price) * 0.2))
où {:02.2f}
sera remplacé par votre calcul de prix, formatant la valeur à virgule flottante en valeur à 2 décimales.