Python problème : NameError: name 's' is not defined [Résolu]

Signaler
-
Messages postés
7
Date d'inscription
lundi 21 décembre 2020
Statut
Membre
Dernière intervention
21 décembre 2020
-
Bonjour à tous,

Je m'interroge, je suis en train de programmer un script simple. Néanmoins, je souhaiterais que les utilisateurs n'utilisent que des caractères numériques et éventuellement des nombres décimaux mais en aucun cas des lettres et caractères spéciaux... Il y a bien des fonctions ou des boucles mais je souhaiterais que ce soit automatique pour toutes les étapes de mon programme. Actuellement, quand je rentre un lettre j'ai ce retour : NameError: name 's' is not defined. Or j'aimerais à la place redonner la possibilité à l'utilisateur de réinscrire une valeur numérique afin qu'il puisse continuer à utiliser le script...

---------------------------------------

Voici le début de script :
#coding:utf-8
print("Bonjour bienvenu dans le programme de gestion. Ce dernier est un appui à la gestion d'entreprise agricole")
print("Veuillez entrer des caractères numériques uniquement")
#bloquer les caractères spéciaux et les lettres
print ("Année de l'étude de l'analyse")
annee_d_etude = input (" ")


---------------------------------------------

Merci à vous pour vos retours, en espérant être clair.

Moi ;)

25 réponses

je pense que tu devrais de servir de True et False et si ta donner est fausse tu la redemande temps que la donner n'est un chiffre apres je débute en prog donc je suis pas sur c'est une idée
Merci pour cette piste le problème c'est que j'ai plusieurs données, je voudrais que ce soit le cas pour toutes les données. Je ne veux pas écrire un booléen pour chaque variable mais une un booléen pour toutes mes variables... Merci quand même ;)
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
Bonsoir,


annee_d_etude =''
while(not annee_d_etude.isdigit()):
    annee_d_etude = input ("Année de l'étude de l'analyse : ")


on repose la question tant que la saisie n'est pas un nombre ...
Merci pour ce retour mais ce bout de script fonctionne uniquement pour la variable: année_d_etude mais si je vais l'automatiser pour toutes mes variables comment faire s'il vous plaît ? Merci d'avance.

moi :-)
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
Que veux tu dire exactement ?

la méthode isdigit() ne s'applique qu'à une seule variable à la fois, il n' y a pas de recette

magique

L'idéal serait de voir ton code complet ....

Ceci dit as-tu remarqué le input en une seule ligne (pas besoin de print avant) ?
Comme je disais je souhaiterais que l'utilisateur ne puisse pas écrire de caractères spéciaux ou encore de lettre mais uniquement des chiffres.
Voici mon code :
#coding:utf-8
print("Bonjour bienvenu dans le programme de gestion. Ce dernier est un appui à la gestion d'entreprise agricole")
print("Veuillez entrer des caractères numériques uniquement")
#bloquer les caractères spéciaux et les lettres
#suite correcte
print ("Année de l'étude de l'analyse")
annee_d_etude = input (" ")
print ("Age de l'agriculteur")
ageagri = input (" ")
print ("Année d'installation")
annee_installation = input (" ")
while annee_installation >0:
        print ("BILAN")
        print ("Bilan Financier")
        print ("Actif")
        print ("Immobilisations")
        immobilisations = float (input(" "))
        print ("stocks")
        stocks = float (input (" "))
        print ("Créances")
        creances = float (input (" "))
        print ("Disponible")
        disponible = float (input (" "))


Merci d'avance,

Moi :)
Messages postés
30545
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 janvier 2021
7 203
Salut,

Dans ce cas tu crées tes propres fonctions de saisie int et float
print("Bonjour bienvenu dans le programme de gestion. Ce dernier est un appui à la gestion d'entreprise agricole")
print("Veuillez entrer des caractères numériques uniquement")
#bloquer les caractères spéciaux et les lettres
#suite correcte
def input_int(lib):
    saisie=''
    while (not saisie.isdigit()):
       saisie = input (lib)
    return (int(saisie))
def input_float(lib):
   while True:
      saisie = input (lib)
      try:
         float(saisie)
         return (float(saisie))
      except ValueError:
          pass
annee_d_etude = input_int ("Année de l'étude de l'analyse ")
ageagri = input_int ("Age de l'agriculteur ")
annee_installation = input_int ("Année d'installation ")
if annee_installation >0:
   print ("BILAN")
   print ("Bilan Financier")
   print ("Actif")
   immobilisations = input_float("Immobilisations ")
   stocks = input_float ("stocks ")
   creances = input_float ("Créances ")
   disponible = input_float ("Disponible ")

print(annee_d_etude, ageagri, annee_installation,immobilisations,stocks,creances, disponible)

 


Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
Bonjour,

Hé oui

De la façon dont moi2997 posait le problème, on avait l'impression qu'il attendait une

formule magique à écrire en début de code pour que toutes les saisies se fassent

automatiquement sur des nombres:

l y a bien des fonctions ou des boucles mais je souhaiterais que ce soit automatique pour toutes les étapes de mon programme

Automatique : automatiser, c'est coder, il faut que tu codes la mécanique toi-même

ce n'est pas de la magie :-)
Bonjour à tous,

merci pour votre aide... En effet, je cherche à coder pour le moment quand je rentre une lettre ça me met un message d'erreur et ne me propose pas de réécrire... je chercher toujours en tout cas merci pour votre aide...

Moi2937
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
Comment ça, tu cherches toujours ?

on t'a donné des solutions !

Tu ne vas pas me dire que ça:

annee_d_etude =''
while(not annee_d_etude.isdigit()):
    annee_d_etude = input ("Année de l'étude de l'analyse : ")


te sort une erreur si tu entres une lettre, ca te repose la question en fait, donc ca marche !
Re,

quand je fais un copier coller du code et que je provoque l'erreur avec le console j'ai ce retour : .......$ python essai.py
Veuillez entrer des caractères numériques uniquement
Année de l'étude de l'analyse : d
Traceback (most recent call last):
File "essai.py", line 7, in <module>
annee_d_etude = input ("Année de l'étude de l'analyse : ")
File "<string>", line 1, in <module>
NameError: name 'd' is not defined

Je débute l'erreur doit être précisée sous les yeux mais je ne trouve pas... Désolé ...

Moi :)
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
Ouh la,

Tu dis que si tu fais un copié/collé de mes 3 lignes :

annee_d_etude =''
while(not annee_d_etude.isdigit()):
    annee_d_etude = input ("Année de l'étude de l'analyse : ")


et que tu testes ça, ca plante ???

Moi ca donne ça:


Tu fais surement une erreur quelque part
Oui oui je fais un copier coller.... Je vais finir par trouver... mais pour le moment j'ai toujours des messages d'erreur... :(
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
Fais juste un petit fichier test.py avec ces 3 lignes

déjà pour voir ce bout de code ...

ou alors refait voir ton code complet, celui que tu testes et qui sort cette erreur
C'est ce que je fais...

$ python essai.py
Année de l'étude de l'analyse : toto
Traceback (most recent call last):
File "essai.py", line 4, in <module>
annee_d_etude = input ("Année de l'étude de l'analyse : ")
File "<string>", line 1, in <module>
NameError: name 'toto' is not defined

Merci encore pour l'aide...

Moi :)
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
c'est pas possible,

comme je te disais, affiche ton code ici, et avec ls balises comme je le fais, qu'on voie

les indentations
Messages postés
7
Date d'inscription
lundi 21 décembre 2020
Statut
Membre
Dernière intervention
21 décembre 2020

voici une capture d'écran...
Messages postés
30545
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 janvier 2021
7 203
Tu es en quelle version de python ??? moi je suis en 3.9. Car un noyau linux 3.10 date de 7 ans.

avant input il y avait raw_input.
Messages postés
7
Date d'inscription
lundi 21 décembre 2020
Statut
Membre
Dernière intervention
21 décembre 2020
>
Messages postés
30545
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 janvier 2021

J'ai essayé raw-input mais il détecte rien ... mais j'ai la version 3.10 de python ceci explique celà... Dois-je prendre la 3.9 ?
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
pas de capture d'écran !

fais un copié/collé de ton code et mets les balises comme je le fait !

moi je suis en 3.7.2 et ça marche
Messages postés
7
Date d'inscription
lundi 21 décembre 2020
Statut
Membre
Dernière intervention
21 décembre 2020

<code python><#coding:utf-8
annee_d_etude =''
while(not annee_d_etude.isdigit()):
annee_d_etude = input ("Année de l'étude de l'analyse : ")>

En espérant fait comme il le faut car je n'ai jamais mis de balises sur ce site pour mes questions...

Merci
Messages postés
843
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
9 janvier 2021
94
Ben oui ca se voit: tu n'as pas du tout suivi le mode d'emploi

https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()