Python problème : NameError: name 's' is not defined

Résolu
moi2937 -  
moi2937 Messages postés 8 Statut Membre -
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

  • 1
  • 2
  1. camapa
     
    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
    0
  2. moi2937
     
    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 ;)
    0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ...
    0
  4. moi2937
     
    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 :-)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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) ?
    0
  7. moi2937
     
    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 :)
    0
  8. jee pee Messages postés 9437 Date d'inscription   Statut Modérateur Dernière intervention   9 973
     
    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)
    
     


    0
  9. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 :-)
    0
  10. moi2937
     
    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
    0
  11. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 !
    0
  12. moi2937
     
    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 :)
    0
  13. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
  14. moi2937
     
    Oui oui je fais un copier coller.... Je vais finir par trouver... mais pour le moment j'ai toujours des messages d'erreur... :(
    0
  15. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
  16. moi2937
     
    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 :)
    0
  17. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
  18. moi2937 Messages postés 8 Statut Membre
     
    voici une capture d'écran...
    0
    1. jee pee Messages postés 9437 Date d'inscription   Statut Modérateur Dernière intervention   9 973
       
      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.
      0
      1. moi2937 Messages postés 8 Statut Membre > jee pee Messages postés 9437 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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 ?
        0
  19. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
  20. moi2937 Messages postés 8 Statut Membre
     
    <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
    0
  • 1
  • 2