ロードする必要のあるファイルが複数あるので、dict
を使用して短くします。実行すると、
TypeError: 'type' object is not subscriptable
エラー。これを機能させるにはどうすればよいですか?
m1 = pygame.image.load(dict[1])
m2 = pygame.image.load(dict[2])
m3 = pygame.image.load(dict[3])
dict = {1: "walk1.png", 2: "walk2.png", 3: "walk3.png"}
playerxy = (375,130)
window.blit(m1, (playerxy))
通常、変数が定義されていない場合、Python throws NameError
>>> d[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
ただし、Pythonにすでに存在する名前につまずくことができました。
dict
はPythonの組み込み型の名前 なので、奇妙なエラーメッセージのように見えますが、実際にはそうではありません。
dict
のタイプはtype
です。すべてのタイプはPythonのオブジェクトです。したがって、実際にはtype
オブジェクトにインデックスを付けようとしています。これが、エラーメッセージに「 'type'オブジェクトは添字付け不可」と書かれている理由です。
>>> type(dict)
<type 'type'>
>>> dict[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'type' object is not subscriptable
dict
の名前に盲目的に割り当てることはできますが、あなたは本当にそれをしたくないことに注意してください。後で問題が発生します。
>>> dict = {1:'a'}
>>> type(dict)
<class 'dict'>
>>> dict[1]
'a'
問題の真の原因は、変数を使用する前に変数を割り当てる必要があることです。質問のステートメントを並べ替えるだけで、ほぼ確実に機能します。
d = {1: "walk1.png", 2: "walk2.png", 3: "walk3.png"}
m1 = pygame.image.load(d[1])
m2 = pygame.image.load(d[2])
m3 = pygame.image.load(d[3])
playerxy = (375,130)
window.blit(m1, (playerxy))