私は過去数ヶ月にわたって、自分自身でPythonを教えるプロジェクトとしてテキストベースのZorkスタイルのゲームを作成しようとしてきました。dictインベントリ内のアイテムを検索するときのKeyError
私はここstackoverflowとたくさんのYouTubeビデオの素晴らしい人たちのおかげで、まともな進歩を遂げました。私が現在扱っている問題は、Bagクラスのコードの最後です。 私のバッグのクラスでは以下のように、Takeというメソッドがあります。このメソッドはもともとバッグクラス内にはなく、ユーザーコマンドを読み取る下部のセクションにありました。
ユーザーコマンドのロジックを他のゲームから切り離して、指定したクラスに移動することをお勧めしました。
しかし私がこれをする前は、部屋の在庫から特定のアイテムだけを取り上げても問題ありませんでした。今それはすべてを拾う。
は現在、私の部屋の唯一の1つ以上の項目が含まれています(コードは、各部屋には、私は別のの.pyファイルからインポートされてきた最下部に掲載されます定義します)。 "Ornate_Key"と "Knife"を含む "inside cottage"ルーム。
ここには奇妙なことがあります。私がOrnate_Keyを取ろうとすると、それは上手くそれを拾います(また、ナイフをピックアップします)。私はナイフを取るしようとした場合
はしかし、私は、このコードをいじり古いバージョンに戻って、この電流1の比較約6時間を費やしてきた
Traceback (most recent call last):
File "C:/Users/Daniel/Python 3.6/Scripts/PythonPR/Flubbo'sModuleTest.py", line 156, in <module>
bag.CheckTake()
File "C:/Users/Daniel/Python 3.6/Scripts/PythonPR/Flubbo'sModuleTest.py", line 130, in CheckTake
self.Take(command)
File "C:/Users/Daniel/Python 3.6/Scripts/PythonPR/Flubbo'sModuleTest.py", line 122, in Take
if Location.room.roominv[key].name == command.split()[1]:
KeyError: 'Ornate_Key'
このトレースバックとエラーが表示されますなぜ私はこの問題にぶつかっていなかったのですか。そして、なぜこれが突然起きたのか理解できません。
私は一般的にコーディングするのがとても新しいので、私はアーキテクチャ/物事の基本について非常に曖昧です。誰もがこの問題の原因を何か考えているのですか?
このページの最後に、この問題が発生していない古いバージョンのコードセクションを掲載します。
この投稿は既に非常に長いと考えているので、私は、まさに何が起こっているかを実証するためのゲーム例を掲載するかもしれません。
>>> look
You are in a forest, you can hear wildlife all around you. There seems to be a clearing in the distance.
{'Search the ground', 'Go North'}
>>> search
you find a Sword
>>> Take Sword
you take the Sword
>>> n
moving to clearing
You are in a clearing surrounded by forest. Sunlight is streaming in, illuminating a bright white flower in the center of the clearing. To the South is the way you entered the forest. A well worn path goes to the East. In the distance a harp can be heard.
{'Go East', 'Take flower', 'Go south'}
>>> e
moving to forest path
You begin walking down a well beaten path. The sounds of the forest surround you. Ahead you can see a fork in the road branching to the South and East.You can smell smoke coming from the South, and can hear a stream to the East
{'Go East', 'Go West', 'Go South'}
>>> e
moving to stream
You come upon a relaxing stream at the edge of the woods. It looks like there is something shiny in the water. To your South is a rickety looking shack, to your West is the forest path you came down
{'Go West', 'Go South'}
>>> Take Rusty_Key
you take the Rusty_Key
>>> s
moving to shack
In front of you is a shack, possibly used as an outpost for hunting. It looks dilapidated.
{'Go North', 'Go South'}
>>> s
moving to inside shack
The inside of the shack is dirty. Bits of ragged fur are scattered about the floor and on a table against the back wall.A sharp looking knife is on the table. There is an ornate key hanging on the wall by a string.
{'Take Key', 'Take Knife', 'Go North'}
>>> search
you find a Knife
you find a Ornate_Key
>>> Take Ornate_Key
you take the Ornate_Key
>>> Inventory
Your bag contains: Sword
Your bag contains: Rusty_Key
Your bag contains: Knife
Your bag contains: Ornate_Key
>>>
申し訳ありませんが、これは長すぎます。この問題を説明するために最小限の例にまで煮詰めることができますか?たとえば、これがZorkベースのゲームであるという事実は、Pythonクラスの機能とは無関係です – roganjosh
また、Pythonで新しい構造を試している場合は、問題に適用する前に基本的な機能をプロトタイプ化するほうがはるかに簡単です。あなたのアプローチが根本的に欠陥があるものの、それが機能しないことが分かる前にプロジェクト全体で実行されているのであれば、それは修正/取り消しのためのたくさんのものです。 – roganjosh
私はそれを今編集しようとします。私が言ったように、基本的な機能をプロトタイピングする限り、これは私のコードの以前のバージョンで動作していました。私は、なぜそれがクラス内に含まれているので、機能が変更されたのか分かりません。 – SchrodingersStat