Addition de variables type "float"
jipi10
Messages postés
37
Statut
Membre
-
Phil_1857 Messages postés 1956 Statut Membre -
Phil_1857 Messages postés 1956 Statut Membre -
Salut !
J'ai deux questions de noob qui affligeront tout le monde mais tant pis, je me lance.
1) Je souhaite poser des questions à l'utilisateur, auxquelles il doit répondre en introduisant des nombres à virgule (par exemple "40,00" pour a et "12,30" pour b, suivant le schéma suivant:
a = input("Combien vaut a ? ")
b = input("combien vaut b ? ")
c = float(a) + float(b)
print(c)
Et là j'ai l'erreur "ValueError: could not convert string to float:"
Je me doute que c'est juste un truc idiot à bidouiller mais ça me simplifierait bien la vie si j'obtenais un coup de main.
2) J'aimerais savoir s'il est possible de mettre en forme les nombres par le biais de la fonction "write".
en gros, j'introduis une variable; a=1000
J'ai deux questions de noob qui affligeront tout le monde mais tant pis, je me lance.
1) Je souhaite poser des questions à l'utilisateur, auxquelles il doit répondre en introduisant des nombres à virgule (par exemple "40,00" pour a et "12,30" pour b, suivant le schéma suivant:
a = input("Combien vaut a ? ")
b = input("combien vaut b ? ")
c = float(a) + float(b)
print(c)
Et là j'ai l'erreur "ValueError: could not convert string to float:"
Je me doute que c'est juste un truc idiot à bidouiller mais ça me simplifierait bien la vie si j'obtenais un coup de main.
2) J'aimerais savoir s'il est possible de mettre en forme les nombres par le biais de la fonction "write".
en gros, j'introduis une variable; a=1000
A voir également:
- Addition de variables type "float"
- Addition excel - Guide
- Clear type - Guide
- Type de ram - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
15 réponses
Suite:
Et je souhaite avoir une restitution par une commande type doc.write(a)
sous la forme 1 000,00 (séparateur des mille et deux chiffres après la virgule).
Merci par avance.
Et je souhaite avoir une restitution par une commande type doc.write(a)
sous la forme 1 000,00 (séparateur des mille et deux chiffres après la virgule).
Merci par avance.
Bonjour,
On a tous été noob un jour, ce n'est pas un défaut. Je dirais même que c'est un état permanent, nous sommes tous le noob de quelqu'un.
Par ailleurs, la possibilité d'une aide est facilitée par l'utilisation des balises de code, qui permet d'une part de vérifier que vous ayez respecté la syntaxe de python et notamment l'indentation, d'autre part qu'apparaissent les messages d'erreur, qui sont un élément important de la progression en matière de codage.
le mode d'emploi est ici et vous pourrez le vérifier immédiatement:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Sur vos questions:
bien que python repose sur le typage dynamique des variables, la syntaxe de la vesrion 3.x implique un string comme résultat d'un input, d'où le message d'erreur.
Pour entrer une variable int votre instruction devrait être sous la forme:
a = int(input("Combien vaut a ? "))
ce qui donnerait directement un entier et éviterait le recours 'la a déclaration dans votre dernière ligne.
Je vous laisse deviner ce qu'il faut écrire pour un float
Pour la deuxième question, le temps que je vérifie un autre intervenant aura donné la syntaxe mais cela repose sans doute sur l'utilisation de la fonction format() puis de la fonction write() pour écrire dans un fichier.
Cordialement
On a tous été noob un jour, ce n'est pas un défaut. Je dirais même que c'est un état permanent, nous sommes tous le noob de quelqu'un.
Par ailleurs, la possibilité d'une aide est facilitée par l'utilisation des balises de code, qui permet d'une part de vérifier que vous ayez respecté la syntaxe de python et notamment l'indentation, d'autre part qu'apparaissent les messages d'erreur, qui sont un élément important de la progression en matière de codage.
le mode d'emploi est ici et vous pourrez le vérifier immédiatement:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Sur vos questions:
bien que python repose sur le typage dynamique des variables, la syntaxe de la vesrion 3.x implique un string comme résultat d'un input, d'où le message d'erreur.
Pour entrer une variable int votre instruction devrait être sous la forme:
a = int(input("Combien vaut a ? "))
ce qui donnerait directement un entier et éviterait le recours 'la a déclaration dans votre dernière ligne.
Je vous laisse deviner ce qu'il faut écrire pour un float
Pour la deuxième question, le temps que je vérifie un autre intervenant aura donné la syntaxe mais cela repose sans doute sur l'utilisation de la fonction format() puis de la fonction write() pour écrire dans un fichier.
Cordialement
Infos sur le formatage:
https://stackoverflow.com/questions/6149006/display-a-float-with-two-decimal-places-in-python
https://docs.python.org/fr/3.9/library/stdtypes.html
A regarder pour la fonction write()
https://docs.python.org/3/tutorial/inputoutput.html
Je n'ai pas vérifié si l'on peut y insérer la fonction float() ou s'il faut d'abord réaliser une conversion de float formaté en string, mais c'est un bel exercice de vérifier qu'on peut intégrer le float dans un write().
Sous la forme write(format(..))
Ce serait bien de nous faire un retour sous forme d'un script sous balises.
Merci d'avance.
https://stackoverflow.com/questions/6149006/display-a-float-with-two-decimal-places-in-python
https://docs.python.org/fr/3.9/library/stdtypes.html
A regarder pour la fonction write()
https://docs.python.org/3/tutorial/inputoutput.html
Je n'ai pas vérifié si l'on peut y insérer la fonction float() ou s'il faut d'abord réaliser une conversion de float formaté en string, mais c'est un bel exercice de vérifier qu'on peut intégrer le float dans un write().
Sous la forme write(format(..))
Ce serait bien de nous faire un retour sous forme d'un script sous balises.
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ok. J'ai survolé les liens, ça a l'air de bien dégrossir la question.
Je vais potasser ça ce soir.
Encore merci Georges !
Je vais potasser ça ce soir.
Encore merci Georges !
Georges explique dans son message que les versions postérieures à la 3.0 considèrent la variable issue d'un INPUT comme un string.
peut-être utilises-tu une version antérieure.
peut-être utilises-tu une version antérieure.
non, je suis en 3.7.2
donc la variable issue de input est bien une string
mais ensuite float(a) converti bien la string a en float, de même pour b
et ca donne ce que tu vois sur mon image ...
il marche très bien ton code
donc la variable issue de input est bien une string
mais ensuite float(a) converti bien la string a en float, de même pour b
et ca donne ce que tu vois sur mon image ...
il marche très bien ton code
Bonjour Phil,
Je n'ai effectivement testé que la première ligne (dans thonny, qui se prête au code sans enregistrer le script, comme tu le sais sans doute) puisqu'il signalait avoir eu un message d'erreur.
As-tu une idée d'où ça vient? de l'IDE utilisé. C'est quand même surprenant non?
jipi aura découvert une autre méthode, qui lui servira peut-être par ailleurs.
Je vais faire ton test, pour ma propre culture, sans aucun doute du résultat.
Et pour ce que je suggère plus loin, est-il possible de mixer le write() et le format()
Ca m'a donné l'occasion de te saluer.
A plus
Je n'ai effectivement testé que la première ligne (dans thonny, qui se prête au code sans enregistrer le script, comme tu le sais sans doute) puisqu'il signalait avoir eu un message d'erreur.
As-tu une idée d'où ça vient? de l'IDE utilisé. C'est quand même surprenant non?
jipi aura découvert une autre méthode, qui lui servira peut-être par ailleurs.
Je vais faire ton test, pour ma propre culture, sans aucun doute du résultat.
Et pour ce que je suggère plus loin, est-il possible de mixer le write() et le format()
Ca m'a donné l'occasion de te saluer.
A plus
Bonjour Georges,
Oui, c'est bizarre, son code tout simple fonctionne sans erreur
Personnellement, j'ai IDLE comme IDE, mais en fait, j'utilise mon éditeur de texte favori
(UltraEdit32), et j'exécute en double-cliquant le fichier .py dans mon répertoire
Oui, c'est bizarre, son code tout simple fonctionne sans erreur
Personnellement, j'ai IDLE comme IDE, mais en fait, j'utilise mon éditeur de texte favori
(UltraEdit32), et j'exécute en double-cliquant le fichier .py dans mon répertoire
J'ai eu l'impression que c'est ce qu'il voulait faire
je souhaite avoir une restitution par une commande type doc.write(a)
sous la forme 1 000,00 (séparateur des mille et deux chiffres après la virgule)
le doc m'a fait penser qu'il voulait transférer le résultat dans un fichier texte mais c'est sans doute une erreur de ma part.
je souhaite avoir une restitution par une commande type doc.write(a)
sous la forme 1 000,00 (séparateur des mille et deux chiffres après la virgule)
le doc m'a fait penser qu'il voulait transférer le résultat dans un fichier texte mais c'est sans doute une erreur de ma part.
Bonjour,
"par exemple "40,00" pour a et "12,30" pour b"la virgule en séparateur pour la conversion float ne vas passer
Oui, apparemment, il s'agit d'un problème de virgule... Dommage, les virgules sont graphiquement plus pertinentes dans un texte de type contrat.
Je vous fais un rendu sur les float et les séparateurs dès que j'ai programmé mon module. (Pas tout de suite, je suis loin d'être une flèche.)
Merci à tous en tout cas.
Je vous fais un rendu sur les float et les séparateurs dès que j'ai programmé mon module. (Pas tout de suite, je suis loin d'être une flèche.)
Merci à tous en tout cas.
Bonjour
Et au pire ça se traite.
le séparateur décimal est un point et pas une virgule ...certes mais il y a des langages qui prennent en compte la culture de l'ordinateur
Et au pire ça se traite.
nombreStringFormatFrancais = "1 234,56"
intermediaire = nombreStringFormatFrancais.replace(" ","")
nombreStringFormatInformatique = intermediaire.replace(",", ".")
nombre = float(nombreStringFormatInformatique)
print("le nombre est ", nombre)
A y'est, ça marche !
Je vous propose ce petit programme qui calcule la mensualité d'un prêt avec ou sans différé, à partir du montant du prêt, de son taux et de sa durée.
(cliquer sur le lien en bas de page pour avoir les indentations correctes)
import locale
locale.setlocale(locale.LC_ALL, '')
montantcrédit= float(input("Quel est le montant du prêt ? "))
tauxcrédit= float(input("Quel est le taux d'intérêt ? "))
duréecrédit=int(input("Quelle est la durée du crédit en mois ? "))
intérêtmensuel=(montantcrédit*(tauxcrédit/100)/12)
intérêtannuel=(montantcrédit*(tauxcrédit/100))
présencedifféré= input("Y a-t-il un différé ? ")
if présencedifféré=="o":
typedifféré=input("le différé est-il partiel ou total (p/t) ? ")
duréedifféré=int(input("Merci d'indiquer la durée du différé "))
duréecrédit=int(duréecrédit)-int(duréedifféré)
if typedifféré =="p":
print("\n\nla mensualité du différé partiel est de " + ("{:,.2f}".format(intérêtmensuel).replace(',', ' ').replace('.', ',')) + " euros durant " + str(duréedifféré) + " mois")
elif typedifféré == "t":
indexdifféré=int((duréedifféré)/12)
for i in range (1, indexdifféré + 1):
intérêtannuel = (montantcrédit * (tauxcrédit / 100))
montantcrédit=montantcrédit + intérêtannuel
print("\n\ndifféré total durant " + str(duréedifféré) + " mois")
mensualitéamortissement= ((montantcrédit * (tauxcrédit/100))/12)/(1-(1+((tauxcrédit/100)/12)) **-(duréecrédit))
print("La mensualité d'amortissement est de " + ("{:,.2f}".format(mensualitéamortissement).replace(',', ' ').replace('.', ',')) + " euros durant " + str(duréecrédit) + " mois")
https://www.zupimages.net/up/21/08/zark.png
Je vous propose ce petit programme qui calcule la mensualité d'un prêt avec ou sans différé, à partir du montant du prêt, de son taux et de sa durée.
(cliquer sur le lien en bas de page pour avoir les indentations correctes)
import locale
locale.setlocale(locale.LC_ALL, '')
montantcrédit= float(input("Quel est le montant du prêt ? "))
tauxcrédit= float(input("Quel est le taux d'intérêt ? "))
duréecrédit=int(input("Quelle est la durée du crédit en mois ? "))
intérêtmensuel=(montantcrédit*(tauxcrédit/100)/12)
intérêtannuel=(montantcrédit*(tauxcrédit/100))
présencedifféré= input("Y a-t-il un différé ? ")
if présencedifféré=="o":
typedifféré=input("le différé est-il partiel ou total (p/t) ? ")
duréedifféré=int(input("Merci d'indiquer la durée du différé "))
duréecrédit=int(duréecrédit)-int(duréedifféré)
if typedifféré =="p":
print("\n\nla mensualité du différé partiel est de " + ("{:,.2f}".format(intérêtmensuel).replace(',', ' ').replace('.', ',')) + " euros durant " + str(duréedifféré) + " mois")
elif typedifféré == "t":
indexdifféré=int((duréedifféré)/12)
for i in range (1, indexdifféré + 1):
intérêtannuel = (montantcrédit * (tauxcrédit / 100))
montantcrédit=montantcrédit + intérêtannuel
print("\n\ndifféré total durant " + str(duréedifféré) + " mois")
mensualitéamortissement= ((montantcrédit * (tauxcrédit/100))/12)/(1-(1+((tauxcrédit/100)/12)) **-(duréecrédit))
print("La mensualité d'amortissement est de " + ("{:,.2f}".format(mensualitéamortissement).replace(',', ' ').replace('.', ',')) + " euros durant " + str(duréecrédit) + " mois")
https://www.zupimages.net/up/21/08/zark.png
Tu as oublié les balises code du forum.
Zut, à la seconde ligne ça plante :
tu n'as pas réglé la saisie de la virgule
Zut, à la seconde ligne ça plante :
Quel est le taux d'intérêt ? 1,25
Traceback (most recent call last):
File "D:\Dev\Python\Exe\ccm\interet.py", line 5, in <module>
tauxcrédit= float(input("Quel est le taux d'intérêt ? "))
ValueError: could not convert string to float: '1,25'
tu n'as pas réglé la saisie de la virgule
Ce n'est pas si important pour moi. Ma problématique résidait surtout dans la restitution des nombres. Je dirais même que l'utilisation du point situé dans le pavé numérique facilite la saisie des nombres.
Apparemment, comme le dit Phil, c'est une question culturelle.
Merci à tous en tous cas et à la prochaine.
Apparemment, comme le dit Phil, c'est une question culturelle.
Merci à tous en tous cas et à la prochaine.
import locale
locale.setlocale(locale.LC_ALL, '')
montantcrédit= float(input("Quel est le montant du prêt ? "))
tauxcrédit= float(input("Quel est le taux d'intérêt ? "))
duréecrédit=int(input("Quelle est la durée du crédit en mois ? "))
intérêtmensuel=(montantcrédit*(tauxcrédit/100)/12)
intérêtannuel=(montantcrédit*(tauxcrédit/100))
présencedifféré= input("Y a-t-il un différé ? ")
if présencedifféré=="o":
typedifféré=input("le différé est-il partiel ou total (p/t) ? ")
duréedifféré=int(input("Merci d'indiquer la durée du différé "))
duréecrédit=int(duréecrédit)-int(duréedifféré)
if typedifféré =="p":
print("\n\nla mensualité du différé partiel est de " + ("{:,.2f}".format(intérêtmensuel).replace(',', ' ').replace('.', ',')) + " euros durant " + str(duréedifféré) + " mois")
elif typedifféré == "t":
indexdifféré=int((duréedifféré)/12)
for i in range (1, indexdifféré + 1):
intérêtannuel = (montantcrédit * (tauxcrédit / 100))
montantcrédit=montantcrédit + intérêtannuel
print("\n\ndifféré total durant " + str(duréedifféré) + " mois")
mensualitéamortissement= ((montantcrédit * (tauxcrédit/100))/12)/(1-(1+((tauxcrédit/100)/12)) **-(duréecrédit))
print("La mensualité d'amortissement est de " + ("{:,.2f}".format(mensualitéamortissement).replace(',', ' ').replace('.', ',')) + " euros durant " + str(duréecrédit) + " mois")