12

好的,所以我正在用 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'时,但当我做其他事情时,代码会正常运行。

任何帮助是极大的赞赏,

谢谢你。

4

2 回答 2

19

在 Python 2 中用于raw_input获取字符串,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)).
于 2013-07-01T20:54:16.770 回答
5

您正在Python 2 上使用该input()函数raw_input()。请改用,或切换到 Python 3。

input()在给定的输入上运行eval(),因此输入n被解释为 python 代码,寻找n变量。你可以通过输入'n'(所以用引号)来解决这个问题,但这几乎不是一个解决方案。

在 Python 3 中,raw_input()已重命名为input(),完全替换了 Python 2 中的版本。如果您的材料(书籍、课程笔记等)input()以预期的方式使用n,您可能需要改用 Python 3。

于 2013-07-01T20:54:23.107 回答