さて、私は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'
が問題になりますが、他のことをすると、コードは通常どおり実行されます。
どんな助けでも大歓迎です、
ありがとうございました。
文字列を取得するには _raw_input
_ in Python 2を使用します。 input
in 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)).
_
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。