Python problème : NameError: name 's' is not defined
RésoluJe 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
L'objectif est d'imposer une saisie numérique dans un script Python, afin d'éviter les erreurs lorsque des lettres sont entrées et d'offrir automatiquement une réinscription sans interrompre l'exécution. Des solutions alternent entre une boucle qui teste isdigit() et relance la saisie jusqu'à ce que le texte soit numérique, et l'adoption de fonctions comme input_int pour l'entier. Autre piste envisagée, plusieurs participants proposent d'encapsuler la validation dans des fonctions d'entrée float et int afin de gérer les nombres décimaux et d'utiliser des blocs try/except pour la robustesse. La solution la plus robuste repose sur des helpers d'entrée dédiés pour int et float, qui exigent une saisie valide via boucle et gestion d'exception, et qui s'appliquent même sans balises ni formatage.
-
Bon je pense avoir trouvé ce code fonctionne avec la version 2.7.18 de python :
#coding:utf-8 annee_d_etude =" " while(not annee_d_etude.isdigit()): annee_d_etude = raw_input ("Année de l'étude de l'analyse : ") -
Bon ça ne fonctionne toujours pas... Le problème ne viendrait pas du fait que j'ai un mac ?
-
J'essaye cette version...
-
Aaaah super!
Ben j'ai la même chose et en Python 3.7.2, ca marche .... -
#coding:utf-8 annee_d_etude ='' while(not annee_d_etude.isdigit()): annee_d_etude = input ("Année de l'étude de l'analyse : ")
Voici le code écrit entre balises. Et merci... -
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() -
<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 -
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 -
-
-
@jee peeJ'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 ?
-
-
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 -
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 :) -
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 -
Oui oui je fais un copier coller.... Je vais finir par trouver... mais pour le moment j'ai toujours des messages d'erreur... :(
-
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 -
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 :) -
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 ! -
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 -
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 :-) -
ModérateurSalut,
Dans ce cas tu crées tes propres fonctions de saisie int et floatprint("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)
-
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 :)
- 1
- 2
