2012-04-10 4 views
-3

は私のスクリプトで、参考のためhttp://pastebin.com/zgRrBX0U「「int型のオブジェクトが呼び出すことはできません」というエラー

が、これは「ハードな方法を学ぶのpython」ゼッド・ショーさんのex36ためのスクリプトです。 私は、ゼルダの伝説の第1レベルから設計されたテキストベースの冒険を作成しようとしていました。

しかし、私はプログラムを開始するときに問題に遭遇しました。メインルームから始めるように機能します。しかし、どちらの方向に行くにしても、間違いがあります。 "'int'オブジェクトは呼び出し可能ではありません。 '

+7

質問の本文に関連コードを入力してください。 –

+0

また、デザインのオーバーホールに時間を費やしたいこともあります。各部屋、動き、敵のそれぞれの「カラフルな説明」をハードコードすることで、コードを再利用することはできません。また、コードを維持するための生きた地獄となり、また読みにくくなります。 – hexparrot

+0

Pythonは初めて使ったプログラミング言語ではありませんか? –

答えて

0

行47:

def roomBA(key, life, door_open, roomBA, roomDA): 

ここではroomBAという名前の関数を定義しています。

ライン129:ここで

roomBA = 0 

、あなたは今、数0にルンバを変更しました。

したがって、定義した元の機能は失われます。あなたはもはやそれを呼び出すために使用する名前を持っていません。ライン132上の

ここ
roomCA(key, life, door_open, roomBA, roomDA) 

、あなたは、関数roomCAを呼んでいます。とりわけ、この関数はプレーヤーからの指示を求めてから、対応するルーム関数を呼び出そうとします。

私は西側を入力したので、変数roomBA(行17)によって参照される関数を呼び出そうとしました。しかし、ああ、それはもはや機能ではありません。それは0なので、あなたは間違いです。

何が起こっているかは、関数名と変数名の間に多くの衝突があることです。もちろん、roomXXはゲーム内の各部屋を表す関数です。次に、あなたは状態変数を持っています(これは今のところroomXXとも呼ばれています)。これらの変数は、前に部屋に入ったかどうかを追跡するためのものです。あなたの関数と状態変数の両方が同じものに命名されているので、あなたはあらゆる種類の予期しないことをしています。

上記のように、コード129と130を削除してコードを実行させることができます。しかし、おそらく基礎のより良い理解を得る必要があります。ここで開始する場所です:エラーは言っ

http://en.wikipedia.org/wiki/Scope_%28computer_science%29

2

roomBAroomDAを関数として定義し、後で...それらを整数にバインドします。もちろん、検索することで意味するものを理解できませんでした。イグナシオが言うように、それは。

+0

私の愚かさ、私はreditを –

1

削除ライン129と130仕事に行くのではないですし、それが動作します。

Pythonでは「呼び出し可能」は、通常の関数である。メッセージは、番号(「治療されることを意味しますint ")を関数(呼び出し可能)として扱うので、Pythonは何をすべきか分からず、終了します。

+0

私は今、私の非常にばかげた問題を修正しました。それはうまく動作し、私はこの小さなプロジェクトで進むことができます、ありがとう。 –

0

。 "'int'オブジェクトは呼び出し可能ではありません。 '私はこのことが何を意味するのか理解できませんでした。

これは、言語の基礎と英語を知ることによって、この意味を理解することを意味します。

エラーは、'int'オブジェクトが呼び出し可能ではないことを示しています。呼び出しは関数(と同様のもの)に対して行います。したがって、関数(または同様のもの)があると思ったintがあります。これは、関数名をintにリバウンドさせたためです。 Pythonで

、あなたは今では注意する必要がありますよう:

  1. すべてがさえ機能、オブジェクトです。

  2. タイプは実行時までチェックされません。

  3. 値には変数(変数名ではありません)があります。

だから、書き込みからあなたを妨げるものは何もありません:

function a(): pass 
a = 1 

最初の行は関数オブジェクトを作成し、名前aにバインドします。 2行目は、整数1を名前aにバインドします。これにより古いバインディングが置き換えられるため、aで、もはや関数の名前ではありません。

関連する問題