2013-07-10 30 views
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不喜歡我的'偉大的邏輯'。請幫忙。

+8

Python不是Java。你不必把所有東西都變成一堂課。具體來說,如果一個類沒有'__init__'以外的方法,它可能會被定義爲一個函數。 – chepner

+0

請擺脫那些* - 進口。你在混淆你的名字空間。 – Matthias

回答

2

循環運行之前,self.door是一個字符串。在循環的第一次迭代中,您將self.door設置爲第一次迭代中對象的引用。在第二次迭代中,您嘗試將該對象用作self.ROOMS上的鍵,但該字典只有鍵的字符串。

您需要設置self.doorplay返回的字符串,我相信:

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

然而,這並不讓你選擇在每個房間一扇新的大門(除非你改變的play定義)。

+0

如何在這種情況下讓班級在不同班級之間切換start_Game? – user2569002

+0

這對codereview.stackexchange.com來說可能是一個更好的問題。你的程序需要大量的重新設計,我認爲這超出了本網站的範圍。 – chepner