2013-03-17 4 views
1

Мой вопрос может показаться запутанным, но это единственный способ, которым я мог думать о его формулировке. Я извиняюсь за любую путаницу, я попытаюсь изо всех сил объяснить.Как создать функцию для принятия аргумента, который является другой функцией?

В основном, что я пытаюсь сделать, есть простая функция выхода в моей игре, которая спрашивает: «Вы хотите выйти?» Если пользователь вводит нет, он возвращает их обратно к функции, в которой они находились.

Вот что я пытался сделать, однако, похоже, это просто возвращается к функции «bear_room()».

def bear_room(): 

    print "You are greeted by a bear" 
    next = raw_input() 

    if next == 'fight': 
     print 'You tried to fight a bear. You died' 
    elif next == 'exit': 
     exit_game(bear_room()) 
    else: 
     print 'I did not understand that!' 
     bear_room() 

def exit_game(stage): 

    print '\033[31m Are you sure you want to exit? \033[0m' 

    con_ext = raw_input(">") 

    if con_ext == 'yes': 
     exit() 
    elif con_ext == 'no': 
     stage 
    else: 
     print 'Please type ''yes'' or ''no' 
     exit_game() 
+0

Просто в сторону: именование переменная 'next' будет затенять встроенную' next' - поэтому вы можете захотеть изменить имя - возможно, 'next_room' например ... –

ответ

1

Вы почти получили его; Вам просто нужно не называть bear_room, когда вы передаете его в качестве аргумента:

elif next == 'exit': 
     exit_game(bear_room) 

С другой стороны, вам нужно вызвать stage как функцию:

elif con_ext == 'no': 
     stage() 
+0

Работало отлично! Благодаря! – George

1

Вы должны понимать разницу между прохождением функция вокруг и вызов ее.

Здесь вы копируете ссылку на функцию raw_input в переменную next, фактически ее не исполняя. Вы, вероятно, хотите добавить круглые скобки () в raw_input:

next = raw_input 

Здесь вы вызываете bear_room() снова, рекурсивно, вместо того, чтобы передать ссылку на него функции exit_game. Вы, вероятно, хотите, чтобы удалить скобки () к bear_room:

elif next == 'exit': 
    exit_game(bear_room()) 

Опять же, упоминая функции без скобок не выполняет его, так что вы хотите, чтобы добавить их здесь:

elif con_ext == 'no': 
    stage 
Смежные вопросы