2013-04-18 2 views
1

Привет, У меня возникли проблемы с написанием этой простой программы. Я только начинаю с Python и надеялся на какую-то помощь. Когда я запускаю функцию start() в нижней части программы, все работает нормально до первого raw_input(). Если пользователь набирает «кофе», например, печатается строка «Достаточно хорошо сделать перерыв», но после этого вместо запуска функции coffee(), как хотелось бы, она снова переходит к функции start() ,Что не так с моим простым кодом здесь?

Может кто-нибудь помочь? Большое спасибо.

def engine(next_scene): 
    scenes = {"start":start(),"coffee":coffee(),"work":work()} 
    return scenes[next_scene] 

def start(): 
    print "you are in the office" 
    print "you wonder what to do" 
    action = raw_input("what do you do? Get coffee or work?") 

    if action == "get coffee": 
     print "Fair enough take a break" 
     next_scene = "coffee" 
     engine(next_scene) 
    if action == "work": 
     print "Good man, you are well on your way to being a coder" 
     next_scene = "work" 
     engine(next_scene) 

def coffee(): 
    print "You walk out of the room" 
    print "You head down the stairs and into the cafe" 
    print "You order an espresso" 
    print "You neck it down" 
    print "Yumm" 
    print "You are wired" 
    action = raw_input("Now what? Work or go home? > ") 

    if action == "work": 
     print "You head back upstairs" 
     next_scene = "work" 
     engine(next_scene) 
    if action == "go home": 
     print "You lazy git" 

def work(): 
    print "You beaver away and become a cool coder" 
    next_scene = "start" 
    engine(next_scene) 

start() 
+0

Я думаю, что вы хотите удалить '()' после своих функций в словаре сцен. Включение скобок пытается вызвать эти функции. – BlackVegetable

ответ

4

Этот

scenes = {"start":start(),"coffee":coffee(),"work":work()} 

должен быть

scenes = {"start":start,"coffee":coffee,"work":work} 

Вы назвали функции в словаре определение, но вы просто хотите, чтобы получить объект-функцию.

+3

И OP, вероятно, хочет изменить следующую строку: 'return scenes [next_scene]()' –

+1

Да, конечно. И он должен позаботиться о том, чтобы он не складывал вызовы на «двигатель». – Matthias

+0

@ Mathias.Спасибо за вашу помощь. Простите, но как мне пойти, фактически называя функцию кофе(), а затем в event next_scene = «кофе»? Извините за основные вопросы. – Reno

1

Ваша функция двигателя должна понравиться.

def engine(next_scene): 
    scenes = {"start":start,"coffee":coffee,"work":work} 
    scenes[next_scene]() 
Смежные вопросы