2013-07-01 15 views
8

Ok, quindi sto scrivendo un codice di controllo di grado in Python e il mio codice è:ingresso(): "NameError: nome 'n' non è definito"

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." 

Quando eseguo attraverso il mio pitone compilatore e scelgo "n", ottengo un errore che dice:

"NameError: name 'n' is not defined"

e quando scelgo "y" ottengo un'altra NameError con 'y' causa dei problemi, ma quando lo faccio un'altra cosa, il codice viene eseguito come normale.

Ogni aiuto è molto apprezzato,

Grazie.

risposta

16

Usa raw_input in Python 2 per ottenere una stringa, input in Python 2 è equivalente a eval(raw_input).

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

Quindi, quando si entra in una cosa del genere in ninput pensa che siete in cerca di una variabile denominata 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 funziona bene:

>>> raw_input() 
n 
'n' 

help su 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. 

aiuto su input:

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

Equivalent to eval(raw_input(prompt)). 
1

Si utilizza la input() function su Python 2. Utilizzare raw_input(), invece, o passare a Python 3.

input() corre eval() sull'ingresso data, in modo da immettendo n viene interpretato come codice python, cercando la variabile n. Si può ovviare a questo inserendo 'n' (quindi con le virgolette) ma questa non è certo una soluzione.

In Python 3, raw_input() è stato rinominato in input(), sostituendo la versione da Python 2 del tutto. Se il tuo materiale (libro, appunti del corso, ecc.) Usa input() in un modo che si aspetta che funzioni n, probabilmente devi passare a utilizzare Python 3.

Problemi correlati