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

raw_inputPython 2 で文字列を取得するために使用します。Python input2 では と同等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)).
于 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 に答える