我不明白代码行为

时间:2013-07-10 14:42:49

标签: python class python-2.7

我有以下代码:

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并不喜欢我的“伟大逻辑”。请帮忙。

1 个答案:

答案 0 :(得分:2)

在循环运行之前,self.door是一个字符串。在循环的第一次迭代中,将self.door设置为第一次迭代时对象的引用。在第二次迭代中,您尝试将该对象用作self.ROOMS上的键,但该字典仅包含键的字符串。

您需要将self.door设置为play返回的字符串,我相信:

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

但是,这不允许您在每个房间选择一扇新门(除非您更改play的定义。)