web-dev-qa-db-fra.com

input (): "NameError: le nom 'n' n'est pas défini"

Ok, donc j'écris un code de vérification de note dans python et mon code est:

unit3Done = str(input("Have you done your Unit 3 Controlled Assessment? (Type y or n): ")).lower()
if unit3Done == "y":
    pass
Elif unit3Done == "n":
    print "Sorry. You must have done at least one unit to calculate what you need for an A*"
else:
    print "Sorry. That's not a valid answer."

Lorsque je l'exécute via mon compilateur python et que je choisis "n", J'obtiens une erreur en disant:

"NameError: le nom 'n' n'est pas défini"

et quand je choisis "y" J'obtiens un autre NameError avec 'y' étant le problème, mais quand je fais autre chose, le code fonctionne normalement.

Toute aide est grandement appréciée,

Je vous remercie.

11
Cal Courtney

Utilisez raw_input in Python 2 pour obtenir une chaîne, input in Python 2 est équivalent à eval(raw_input).

>>> type(raw_input())
23
<type 'str'>
>>> type(input())
12
<type 'int'>

Ainsi, lorsque vous entrez quelque chose comme n dans input, il pense que vous recherchez une variable nommée n:

>>> input()
n
Traceback (most recent call last):
  File "<ipython-input-30-5c7a218085ef>", line 1, in <module>
    type(input())
  File "<string>", line 1, in <module>
NameError: name 'n' is not defined

raw_input Fonctionne très bien:

>>> raw_input()
n
'n'

aide sur raw_input:

>>> print raw_input.__doc__
raw_input([Prompt]) -> string

Read a string from standard input.  The trailing newline is stripped.
If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
On Unix, GNU readline is used if enabled.  The Prompt string, if given,
is printed without a trailing newline before reading.

aide sur input:

>>> print input.__doc__
input([Prompt]) -> value

Equivalent to eval(raw_input(Prompt)).
18
Ashwini Chaudhary

Vous utilisez la fonction input() sur Python 2. Utilisez plutôt raw_input() , ou passer à Python 3.

input() exécute eval() sur l'entrée donnée, donc entrer n est interprété comme python code, à la recherche du n variable. Vous pouvez contourner cela en entrant 'n' (donc avec des guillemets) mais ce n'est guère une solution.

Dans Python 3, raw_input() a été renommé input(), remplaçant la version de Python 2 au total. Si vos documents (livre, notes de cours, etc.) utilisent input() d'une manière qui s'attend à ce que n fonctionne, vous devrez probablement passer à l'utilisation de Python 3 à la place.

5
Martijn Pieters