web-dev-qa-db-ja.com

input(): "NameError:名前 'n'が定義されていません"

さて、私は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'が問題になりますが、他のことをすると、コードは通常どおり実行されます。

どんな助けでも大歓迎です、

ありがとうございました。

11
Cal Courtney

文字列を取得するには _raw_input_ in Python 2を使用します。 input in Python 2はeval(raw_input)と同等です。

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

したがって、ninputのようなものを入力すると、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)).
_
18

input() function on Python 2.を使用しています。代わりに raw_input() を使用してください、またはPython 3.に切​​り替えます。

input()は指定された入力に対してeval()を実行するため、nを入力するとpythonコードとして解釈され、n変数。_'n'_(引用符で囲む)を入力することで回避できますが、これはほとんど解決策ではありません。

Python 3で、raw_input()input()に名前が変更され、Python 2からのバージョンを完全に置き換えます。あなたの資料(本、コースノートなど)はnが機能することを期待する方法でinput()を使用します。おそらくPythonを使用するように切り替える必要があります代わりに3。

5
Martijn Pieters