2013-05-28 2 views
3

У меня есть следующий код:код зацикливается снова и снова

def begin_game(): 
    print "You landed on planet and see three rooms." 
    door = int(raw_input("Pick number of door>>>")) 
    print "You approach and see that you need to enter password..." 
    password = raw_input("Enter your surname>>>") 
    if door == 1: 
     medical_room() 
    if door == 2: 
     library() 
    if door == 3: 
     basement() 
    else: 
     print "No room exists" 
     begin_game() 

begin_game() 

Когда я вхожу door номер, я получаю medical_room функции сделана, но затем выполняются другое заявление и код начинается снова снова и снова.

Мой вопрос в том, почему выполняется инструкция else? Должен ли он останавливаться на if, выполнять внутри блока и останавливаться?

+0

В качестве примечания, вы вообще не хотите позвонить ваша функция снова похожа на петлю назад. Таким образом, у вас есть потенциально бесконечная рекурсия. Каждый раз, когда вы вызываете функцию без возврата, вы строите уровень уровня 1 выше, а когда он достигает 1000 уровней, он прекращает свое существование с исключением. Лучший способ сделать это состоит в том, чтобы поместить всю функцию внутри цикла while while: и иметь случаи без ошибок 'break' или' return' (например, 'if door == 1: return medical_room()' , и т.д.). – abarnert

ответ

10

Для второго и третьего операторов if вам необходимо использовать elif. else рассматривает заявление непосредственно перед этим.

+0

Убей меня на несколько секунд. +1 – Nuclearman

+0

На самом деле я не знал, что это ограничивается только первым заявлением перед ним. – BenniMcBeno

1

В настоящий момент ваш код проверяет первое условие (дверь == 1) и связанные с ним действия, затем проверяет условия второго и третьего условий. Поскольку третий оператор if - False (дверь == 1), он выполнит оператор else.

Вы должны использовать утверждения elif вместо повторных инструкций if.

def begin_game(): 
    print "You landed on planet and see three rooms." 
    door=int(raw_input("Pick number of door>>>")) 
    print "You approach and see that you need to enter password..." 
    password=raw_input("Enter your surname>>>") 
    if door==1: 
     medical_room() 
    elif door==2: 
     library() 
    elif door==3: 
     basement() 
    else: 
     print "No room exists" 
     begin_game() 
3

Вы должны использовать elif, или же каждый раз, когда вы вводите что-нибудь кроме 3, то else блок будет выполнен, так как door != 3 и else блок рассматривает только предшествующее if или elif блок.

def begin_game(): 
    print "You landed on planet and see three rooms." 
    door=int(raw_input("Pick number of door>>>")) 
    print "You approach and see that you need to enter password..." 
    password=raw_input("Enter your surname>>>") 
    if door==1: 
     medical_room() 
    elif door==2: 
     library() 
    elif door==3: 
     basement() 
    else: 
     print "No room exists" 
     begin_game() 

begin_game() 
3

Или так кажется, что вы ищете переключатель заявление, которое не существует в Python вы могли бы сделать что-то вроде этого:

rooms = { 
    1: medical_room, 
    2: library, 
    3: basement, 
} 

chosen_room = rooms[door] 

chosen_room() 
+2

Это, вероятно, способ сделать это ... за исключением того, что вам нужно сделать что-то вроде 'rooms.get (door, no_room_exists)' (с функцией 'no_room_exists', которая обрабатывает ошибку) или' try: '/' кроме KeyError: 'для обработки ошибки в строке. – abarnert

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