Additionner une variable et un chiffre [Résolu]

Signaler
-
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020
-
Bonsoir à tous,
Comment fait-on pour additionner une variable et un chiffre : année = année + 2020
Merci à vous pour vos conseils

A bientot



Configuration: Windows / Chrome 85.0.4183.83

5 réponses

Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208
Bonjour,

Les variables, en python, sont dites dynamiques, à savoir que vous n'avez pas à en préciser le type comme dans d'autres langages.

Dans votre cas, il faut que la déclaration préalable de la variable année se fasse en chiffres et non en lettres (par exemple ne pas écrire mille neuf cent mais 1900) pour que l'opération se fasse.

Par ailleurs, il ne faut pas non plus lettre la valeur de la variable entre guillemets sous peine qu'elle ne soit interprétée comme une chaîne de caractères et non comme un nombre et que l'addition ne se fasse pas.

Ce que vous demandez figure dans le premier chapitre de tous les cours sur python, qu'il faut lire et assimiler avant d'espérer aller plus avant.

Cordialement
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208 > Gmatg
Non, il faut entrer un nombre comme valeur de la variable. Il n'y a rien à convertir.

Si le nom de la variable est A
A=12 suffit. A est le nom de la variable, 12 est la valeur, dans ce cas un nombre.
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020
571 >
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020

Bonjour à tout les 2.

Comme la question est posée sans contexte, on répond sans contexte.

Mais admettons que la variable soit issue d’une saisie clavier, alors elle contient du texte et dans ce cas oui, il faut convertir en nombre.

Pour tes prochaines questions ou réponse, pense à poster le bout de code qui est concerné.
A savoir que pour python il est impératif d’utiliser la coloration syntaxique sinon l’indentation ne sera pas conservé par le site et ton code ne voudra rien dire pour le lecteur. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208 >
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020

Bonjour Whismeril,

J'espérais effectivement qu'un autre contributeur reprenne la main. J' avais effectivement pensé à l'input mais en l'absence de script, je n'ai pas voulu y faire allusion pour ne pas "compliquer" ce premier contact apparemment avec Python.

A bientôt,
Georges
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020
571 >
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020

Sans plus de détails de sa part, on ne peut que supposer...
>
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020

Salut George,
J'ai réussi à faire mon code mais il me reste une dernièere question à vous poser ...
Comment je peux supprimer les "ma_variable.isdigit", ya t'il un autre moyen de procéder ?
Merci à vous tous de m'aider

Mathieu

from datetime import date
date_auj = date.today()

année = input("en quel année etes vous né ?")

if année.isdigit():
    mois = input("et en quel mois etes vous né ?")

    if mois.isdigit():
        if int(année)>2020 or int(année)<1900:
            print("L'année saisi doit être correcte")
        else :

            année = 2020 - int(année)
            mois = 9 - int(mois)
            print("Vous avez", année, "ans et", mois, "mois.")


    else :
            print("L'année saisi doit être correcte")


else :
    print("L'année saisi doit être correcte")
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208
Bonjour,

Whismeril, bien plus capé que moi, répondra sans doute de façon plus pertinente. Vous auriez transmis votre code, même incomplet, la réponse aurait été plus circonstanciée.

A mon avis, vous auriez pu utiliser la forme input(int(...)) sachant que dans python 3, la valeur dans input est par défaut une chaîne de caractères, et de ce fait, comme vous l'exprimiez sans l'appliquer, int() la convertit en entier.

Ceci dit, il faut sans doute prévoir dans la condition if de revenir à l'input si une chaîne est entrée ou si un simple enter est effectué.

@whismeril, tu voudras bien compléter ou rectifier ma réponse.
Cordialement
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208 > gmatg
Moi, ça fonctionne parfaitement, mets une ligne print(année) juste après pour tester. Ou fais un script séparé. Le problème est peut-être dans le reste du code.

voir les exemples ici:

https://snakify.org/fr/lessons/print_input_numbers/

https://stackoverflow.com/questions/55885862/convert-input-str-to-int-in-python

Quel IDE utilises tu? juste par curiosité.

Pour isdigit, je n'ai pas compris pourquoi tu veux l'utiliser puisque la conversion se fait grâce à int(), mais s'il s'agit d'éliminer toute entrée non-numérique, je n'ai pas testé cette méthode et ne peux t'indiquer un substitut.

Dans l'état de mes connaissances, je passe par une boucle while()
>
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020

Bah en faite, je ne veux pas que l'utilisateur rentre des lettres au lieu de chiffres. Donc j'ai mis isdigit mais j'aimerais le remplacer par un autre moyen ... Ya t'il un moyen pour ne pas que l'utilisateur rentre des lettres ?

Merci beaucoup
>
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020

moi j'ai ça comme code (voir mon code), mais quand je rajoute int() devant mon input(), bah sa ne marche pas, enlevée bien évidemment tous les autres int(année) et int(mois), mais il met une erreur à la ligne "if année.isdigit():" ... Est ce normal ?

Merci beaucoup d'avance

#Mini projet

année = input("En quelle année êtes vous né ?")

if année.isdigit():
    mois = input("Et en quel mois êtes vous né ?")

    if mois.isdigit():
        
        if int(mois)>12 or int(mois)<1:
            print("Le mois que vous saisissez doit être correcte")
        else :
            
            if int(année)>2020 or int(année)<1900:
                print("L'année que vous saisisez doit être correcte")
            else :

                année = 2020 - int(année)
                mois = 9 - int(mois)
                print("Vous avez", année, "ans et", mois, "mois.")

    else :
            print("L'année que vous saisissez doit être correcte")

else :
    print("L'année que vous saisissez doit être correcte")
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020
571 > gmatg
Tu devais être en train de rédiger ton message quand j'ai validé le mien, regarde donc le message 16
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208
A la réponse 8, j'ai malencontreusement inversé la forme, int vient en premier, suivi par input.
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208
Si je ne réponds pas de suite, c'est que je suis en train d'arroser() mon jardin, autre fonction à exécuter en ce moment.
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020
571
Houla quelle activité!

d'abord utiliser des accents dans les noms de variables, de méthodes, de classes, bref de n'importe quoi est déconseillé et ce quelque soit le langage.

Whismeril, bien plus capé que moi,
, c'est vite dit, Python n'est pas ma tasse de thé.

Utiliser isdigit est une bonne façon de faire, par contre ton algorithme n'est pas très optimisé.

Tu demandes l'année, ok
Tu demandes le moi, admettons
Tu testes si l'année est valide, heu, non là t'es passé au moi... L'utilisateur, va se dire "qu'est qu'il me fait, il me demande le moi et après il me dit que l'année ne va pas...".

Si tu as déjà appris à utiliser while, alors comme le propose Georges c'est une bonne option

annee = 0 #on initialise avec une valeur interdite
while(annee < 1900 or annee > 2020): #tant que annee a une valeur interdite on la redemande
    texte = input("Année ? ")
    if(texte.isdigit()): #si c'est un entier, on convertit et on assigne
        annee = int(texte)
        

print(annee)


Et ensuite tu fais pareil avec le moi.

Cela dit, si tu fais tourner ce programme dans un moi, ou dans un an qu'est ce qui clochera?
Messages postés
5034
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
9 septembre 2020
1 208
Je me suis en effet emmêlé les pinceaux dans le tuyau d'arrosage. J'ai repris sans corriger "année" au lieu de "annee".

Je pense, gmatg, que tu ne devrais pas t'évertuer à trouver un remplaçant à isdigit. Je ne dis pas que cette fonction ne peut pas servir, mais comme je te le disais, la combinaison int/input dans une boucle while() suffit à bloquer les entrées interdites toute entrée autre qu'un chiffre fera boucler vers la question.

Mais tu ne devraii pas essayer de fair tout fonctionner d'un coup.

Si tu as un problème avec int/input, essaie de le résoudre dans un script à part, comme je te le conseillais. Je t'ai transmis deux exemples de cours de python, les ai essayé et ca fonctionne. Il suffit de les recopier et de les modifier. Il n'y aucune raison que ça ne fonctionne pas. Je l'ai utilisé des dizaines de fois. A moins que tu ne sois encore sous python 2.

Tu ne réponds pas sur ton IDE.

Envoie nous un code non-fonctionnel correspondant à ces seules lignes et je les testerai.

Bien évidemment, le script de Whismeril est bon, qui utilise isdigit(). Test le tel quel avant d'essayer de l'introduire dans ton code.

A plus
d'accord, je vois où tu veux en venir avec ta technique :)
Mais du coup cette portion de code remplace quel parti de mon code ?

Merci beaucoup
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020
571 > gmatg
Si tu vois où je veux en venir, tu devrais trouver tout seul
>
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020

oui, c'est bon !!!
Merci à vous tous
Messages postés
14729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 septembre 2020
571
de rien