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为对对象的引用。在第二次迭代中,您尝试将该对象用作 上的键self.ROOMS,但该字典只有键的字符串。

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

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

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

于 2013-07-10T14:51:33.837 回答