47行目:
def roomBA(key, life, door_open, roomBA, roomDA):
ここで roomBA という名前の関数を定義しています。
129行目:
roomBA = 0
ここで、roomBA を番号 0 に変更しました。
したがって、定義した元の関数は失われます。それを呼び出すために使用する名前はもうありません。
132 行目:
roomCA(key, life, door_open, roomBA, roomDA)
ここでは、関数 roomCA を呼び出しています。特に、この関数はプレイヤーに指示を求め、対応するルーム関数を呼び出そうとします。
west と入力したので、変数 roomBA によって参照される関数を呼び出そうとしました (17 行目)。しかし、ああ、それはもはや機能ではありません。0です。したがって、エラーです。
何が起こっているかというと、関数名と変数名の間に多くの衝突があります。もちろん、roomXX はゲーム内の各部屋を表す関数です。次に、状態変数 (今のところ、roomXX とも呼ばれます) があります。これらの変数は、以前に部屋に入ったことがあるかどうかを追跡することを目的としているようです。関数と状態変数の両方に同じ名前が付けられているため、あらゆる種類の予期しないことを行っています。
上記の投稿で述べたように、129 行目と 130 行目を削除してコードを実行できます。ただし、おそらく基本をよりよく理解する必要があります。開始する場所は次のとおりです。
http://en.wikipedia.org/wiki/Scope_%28computer_science%29