raw_input () не работает правильно? - PullRequest
0 голосов
/ 07 февраля 2012

Хорошо,

Итак, я сейчас работаю над простым текстовым RPG (на Python). Но по какой-то причине одной из моих функций является странное чтение входных данных.

Прямо сейчас каждая комната в подземелье - это отдельная функция. Вот комната, которая не работает:

def strange_room():

    global fsm
    global sword
    global saw

    if not fsm:
        if not saw:
            print "???..."
            print "You're in an empty room with doors on all sides."
            print "Theres a leak in the center of the ceiling... strange."
            print "In the corner of the room, there is an old circular saw blade leaning against the wall."
            print "What do you want to do?"

            next6 = raw_input("> ")

            print "next6 = ", next6

            if "left" in next6:
                zeus_room()

            elif "right" in next6:
                hydra_room()

            elif "front" or "forward" in next6:
                crypt_room()

            elif ("back" or "backwad" or "behind") in next6:
                start()

            elif "saw" in next6:
                print "gothere"
                saw = True
                print "Got saw."
                print "saw = ", saw
                strange_room()

            else:
                print "What was that?"
                strange_room()

        if saw:
            print "???..."
            print "You're in an empty room with doors on all sides."
            print "Theres a leak in the center of the ceiling... strange."
            print "What do you want to do?"

            next7 = raw_input("> ")

            if "left" in next7:
                zeus_room()

            elif "right" in next7:
                hydra_room()

            elif "front" or "forward" in next7:
                crypt_room()

            elif ("back" or "backwad" or "behind") in next7:
                start()

            else:
                print "What was that?"
                strange_room()

Моя проблема в том, чтобы получить мой вклад. Эта функция выполняется вплоть до строки 17. Кажется, что ввод в первый раз происходит, но оператор print для печати ввода не выполняется. Кроме того, правильно работают только команды left, right и front / forward. Все остальное, что я набираю, выполняет только функцию crypt_room (), которую должны выполнить «front» / «forward».

Спасибо.

Ответы [ 2 ]

4 голосов
/ 07 февраля 2012

Выражение

"front" or "forward" in next6

оценивается как "front" и всегда считается истинным в операторе if. То, что вы, вероятно, имеете в виду, это

"front" in next6 or "forward" in next6

В вашем коде больше ошибок такого типа. В общем, выражение

A or B

оценивается как A, если A равно , верно и B в противном случае.

Как примечание, весь дизайн вашей программы нарушен. Рекурсивные вызовы при входе в разные комнаты быстро достигнут максимальной глубины рекурсии.

0 голосов
/ 08 февраля 2012

Свен Марнах сказал, почему ваш код не работает.Чтобы все работало правильно, вы должны использовать any() ::

("back" or "backwad" or "behind") in next6:

должно быть

any(direction in next6 for direction in ("back", "backwad", "behind")):
...