我有以下代码:
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并不喜欢我的“伟大逻辑”。请帮忙。
答案 0 :(得分:2)
在循环运行之前,self.door
是一个字符串。在循环的第一次迭代中,将self.door
设置为第一次迭代时对象的引用。在第二次迭代中,您尝试将该对象用作self.ROOMS
上的键,但该字典仅包含键的字符串。
您需要将self.door
设置为play
返回的字符串,我相信:
while True:
room=self.ROOMs[self.door]
self.door=room().play()
但是,这不允许您在每个房间选择一扇新门(除非您更改play
的定义。)