input (): "NameError: имя 'n' не определено"

python terminal nameerror

43063 просмотра

2 ответа

532 Репутация автора

Итак, я пишу код проверки оценки в Python, и мой код:

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

Когда я запускаю его через мой python-компилятор и выбираю "n", я получаю сообщение об ошибке:

"NameError: имя 'n' не определено"

и когда я выбираю, "y"я получаю другое NameErrorс 'y'проблемой, но когда я делаю что-то еще, код работает как обычно.

Любая помощь очень ценится,

Спасибо.

Автор: Cal Courtney Источник Размещён: 01.07.2013 08:53

Ответы (2)


18 плюса

189572 Репутация автора

Решение

Используйте raw_inputв Python 2, чтобы получить строку, inputв Python 2 эквивалентно eval(raw_input).

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

Итак, когда вы вводите что - то подобное nв inputто думает , что вы ищете переменную с именем 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 работает отлично:

>>> raw_input()
n
'n'

помощь по 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.

помощь по input:

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

Equivalent to eval(raw_input(prompt)).
Автор: Ashwini Chaudhary Размещён: 01.07.2013 08:54

3 плюса

772439 Репутация автора

Вы используете input()функцию на Python 2. Используйте raw_input()вместо этого или переключитесь на Python 3.

input()выполняется eval()на заданном вводе, поэтому ввод nинтерпретируется как код Python, ищущий nпеременную. Вы можете обойти это, введя 'n'(например, с кавычками), но это вряд ли решение.

В Python 3 raw_input()был переименован в input(), полностью заменяя версию из Python 2. Если ваши материалы (книги, заметки о курсах и т. Д.) Используются input()так, как ожидается n, вам, вероятно, придется перейти на использование Python 3.

Автор: Martijn Pieters Размещён: 01.07.2013 08:54
Вопросы из категории :
32x32