Python: метод Split () во входных данных изменяет результат операторов if в текстовой RPG-игре - PullRequest
0 голосов
/ 25 февраля 2020

Я уже месяц учусь кодировать с помощью учебника «Learn Python The Hard Way». Пока это было очень весело. Я бросил себе вызов в создании текстовой RPG-игры.

В настоящее время я переписываю код для улучшения читабельности и обслуживания.

Я столкнулся с проблемой:

Если Я добавляю метод split (), тогда условия

elif "open door" == choice:
elif "search door" == choice:

больше не выполняются.

Я получаю

print "Invalid"

для "открытой двери" == выбор

и

print "You find nothing."

для "поисковой двери" == выбор

В основном это означает, что он переходит к операторам else:

I ' Я хотел бы использовать метод split (), чтобы при наличии соответствующего ввода, но с добавлением текста, присоединенного к условному слову, например, «kegaasoaosij» вместо «keg», условие не выполнялось.

В идеале я бы добавил файл словаря, чтобы поиск с бессмысленными словами не производил:

print "You find nothing."

Но это для другой сессии ...

Любые идеи о том, как решить эту проблему? Приветствуются любые другие улучшения.

Спасибо за помощь!

prison_key = False
def test():
    global prison_key
    curr_prompt = "What do you do?"
    print curr_prompt
    choice = raw_input("> ").lower().split()
    while "quit" not in choice:
        if "go" in choice:
            if "cellar" in choice:
                print "cellar"
            elif "gravel" in choice or "path" in choice:
                print "gravel path"
            elif "prison" in choice and prison_key:
                print "You enter the prison."
            elif "prison" in choice: 
                print "The door is locked."
            else:
                print "Invalid"
        elif "search" in choice:
            if "search" == choice:
                print "invalid"
            elif "prison":
                print "The door is closed."
            elif "bucket" in choice:
               print "The bucket is empty."
            elif "keg" in choice:
                prison_key = True
                print "You find a key."
            elif "door" in choice and ("heavy" in choice or "steel" in choice or "metal" in choice):
                print "It looks like a prison door"
            elif "search door" == choice:
                print "Which one?"
            else:
                print "You find nothing."
        elif "open door" == choice:
                print "which one?" 
        elif "open" in choice:
            if "door" in choice and ("wooden" in choice or "cellar" in choice):
                print "gravel path"
            elif "door" in choice and ("steel" in choice or "metal" in choice or "heavy" in choice or "prison" in choice) and prison_key:
                print "You open the prison"
            elif "door" in choice and ("steel" in choice or "metal" in choice or "heavy" in choice or "prison" in choice):
                print "the door is locked"
            elif "prison" in choice and prison_key:
                print "You enter the prison."
            elif "prison" in choice:
                print "the door is locked."
            else:
                print "invalid"
        elif "drink" in choice and "wine" in choice:
            print "You alcoholic."
        else:
            print "invalid"
        print curr_prompt
        choice = raw_input("> ").lower().split()
    exit(0)

test()

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Ладно, я наконец-то нашел решение своей проблемы.

Поскольку метод split () будет отрезать вход STRING «открытая дверь» в элементах из списка, лучшее решение - это создать список как условное утверждение для: "Какой?" утверждения, которые должны быть выполнены.

Итак:

if ["open", "door"] == choice
    print "Which one?"

и

if ["search", "door"] == choice
    print "Which one?"

Это то, что я искал и является лучшим решением для эффекта, который я имел в mind.

Это не позволяет пользователю вводить искомые ключевые слова с дополнительными нежелательными символами, прикрепленными к нему.

Спасибо всем участникам за помощь! Очень ценится:)

0 голосов
/ 25 февраля 2020

Вам не нужно разбивать строку. Операция a in b проверит, находится ли подстрока a в основной строке b. Надеюсь, это поможет

РЕДАКТИРОВАТЬ: привет PGlenn, спасибо, что вы так добры! Я собрал этот фрагмент кода:

choices = choices.split()
for i in range(len(choices)-1):
    if choices[i] + ' ' + choices[i+1] in ('open door', 'close door'):
        print(choices[i] + ' ' + choices[i+1])
        newval = choices[i] + ' ' + choices[i+1]
        choices.remove(choices[i])
        choices.remove(choices[i])
        choices.insert(i, newval)
        break

Этот l oop в основном ищет «открытую дверь» и «закрытую дверь» и соответственно обновляет список choices. К сожалению, это не сработает, если в одной строке несколько «открытых дверей» и «закрытых дверей». Надеюсь, что это поможет и удачи в вашем путешествии Python!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...