2013-07-10 2 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.door в строку возвращенного play, я считаю:

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

Однако это не позволяет выбрать новую дверь в каждой комнате (если вы не измените определение play).

+0

Как я могу в этой ситуации сделать класс start_Game переключаться между разными классами? – user2569002

+0

Возможно, это лучший вопрос для codereview.stackexchange.com. Ваша программа нуждается в большом количестве редизайна, который, я думаю, выходит за рамки этого сайта. – chepner

Смежные вопросы