1

私は次のコードを持っています:

from random import randint
from medical_room import *
from Library import *
from basement import *
from End import *

class start_Game(object):
    def __init__(self):
       print "You landed on planet and see three rooms."
       print "You approach and see that you need to enter password..."
       self.door=raw_input("Pick number of door>>>")
       self.password=('%d')%(randint(1,9))
       self.entered_password=int(raw_input("Enter password of one digit>>>"))
       self.ROOMs={'1':Medical_room,'2':Library,'3':basement,'4':End}
       while True:
 #            break
            room=self.ROOMs[self.door]
 #            print room()
            self.door=room()

a=start_Game()

ドア番号について尋ねられたら、「1」を選択すると、クラスMedical_roomが開始されます (クラスのコードは以下のとおりです)。

class Medical_room(object):
    def __init__(self):
         self.play()

    def play(self):
         print "Medical_room plays"
         return '2'

Libraryしかし、エラーが発生してからクラスに切り替えることができません:

room=self.ROOMs[self.door]
KeyError: <medical_room.Medical_room object at 0x0000000002906978>

私にとってはすべて問題ありませんが、Python は私の「優れたロジック」を気に入りません。助けてください。

4

1 に答える 1

2

ループが実行される前self.doorは、文字列です。ループの最初の繰り返しで、最初の繰り返しでself.doorオブジェクトへの参照として設定します。2 回目の繰り返しで、そのオブジェクトを のキーとして使用しようとしますself.ROOMSが、その辞書にはキーの文字列しかありません。

self.doorによって返される文字列に設定する必要がありplayます。

while True:
    room=self.ROOMs[self.door]
    self.door=room().play()

ただし、各部屋で新しいドアを選択することはできません ( の定義を変更しない限りplay)。

于 2013-07-10T14:51:33.837 に答える