Addition de variables type "float"

Signaler
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021
-
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
-
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
A voir également:

15 réponses

Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

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.
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021
1 638
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
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

Grazie mille Georges !
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021
1 638
prego, jipi.
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021
1 638
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.
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

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 !
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100
Bonjour jipi10,


C'est bizarre quand même, j'ai testé ton code tel quel et il fonctionne très bien:

Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

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.
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100
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
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021
1 638
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
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021
1 638
@ jipi

Testé sous mu et thonny et fonctionne sans problème. Quel ide ou éditeur aviez vous utilisé?
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100
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
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021
1 638
Attendons le retour de jipi.

Je t'ai repéré sur un circuit automobile et n'ai pas eu de réponse à ma question:

est-il possible de mixer le write() et le format()

L'ivresse de la vitesse?
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100 >
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021

write, c'est pour écrire dans un fichier ...
Messages postés
6746
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
25 février 2021
1 638 >
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021

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.
Messages postés
31054
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 février 2021
7 409
Bonjour,

"par exemple "40,00" pour a et "12,30" pour b"   
la virgule en séparateur pour la conversion float ne vas passer
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100 >
Messages postés
15615
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 février 2021

Ok, mais dans les langages de programmation en général (C, C++, Basic, Java, Tcl, Python ...), c'est toujours un point décimal
culture ou pas culture ...

Mais bon, tu sais comment traiter le problème maintenant ...

a = input("Combien vaut a ? ")
a = float(a.replace(',','.'))
Messages postés
15615
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 février 2021
665 >
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021

Tu sites C++ et Basic, les versions .Net de ces langages prennent en compte la culture
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100 >
Messages postés
15615
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 février 2021

Tu sites ..
Ah, tu veux dire tu cites ..

Ok, mais moi je ne table jamais là-dessus, je reste basique: séparateur = point ...
Messages postés
15615
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 février 2021
665 >
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021

Tu peux charier mon auretografe si tu veux, je reconnais faire régulièrement de fautes.
Mais y'a bien pire que moi sur les forums ;)
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100 >
Messages postés
15615
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 février 2021

C'est pas faux ! :-) :-)
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100
Ah ça, c'est sur !

En fait, si c'est vraiment ça qu'il entre, tout vient de là !
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

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
Messages postés
15615
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 février 2021
665
Dans le message 2, Georges 97 a mis un lien vers le petit tuto qu'il est primordial de lire et appliquer pour poster un code.

En l'état ton code n'est fonctionnel
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021
>
Messages postés
15615
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 février 2021

Désolé, en plus d'être un noob, je suis un boulet !!!

J'ai corrigé.
Messages postés
31054
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 février 2021
7 409
Tu as oublié les balises code du forum.

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

Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

Oui, il faut mettre un point. Le tout est de le savoir sinon ça plante.
Messages postés
31054
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 février 2021
7 409 >
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

tu mets des accents dans les noms de variables, une virgule dans l'affichage du montant du remboursement, mais la virgule ne fonctionne pas dans la saisie, ce n'est pas cohérent ;-)))
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021
>
Messages postés
31054
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 février 2021

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.
Messages postés
939
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 février 2021
100 >
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

Oui mais quand même, Phil il dit aussi que les accents dans les noms de variables, c'est plutôt vilain
Et pour tes saisies tu aurais pu faire ça:

def get_float(s):
    if(',' in s): s = s.replace(',','.')
    return(float(s))

montant_credit  = get_float(input('Quel est le montant du prêt ? : '))

etc ..
Messages postés
18
Date d'inscription
samedi 15 août 2020
Statut
Membre
Dernière intervention
25 février 2021

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")