Распечатать правильное событие, в зависимости от ввода пользователя - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над текстовой приключенческой игрой. По сути я хочу вернуть правильное событие в зависимости от того, что пользователь вводит Прямо сейчас, это дает одно и то же событие независимо от того, что пользователь вводит (EVENT_DRAGON возвращается каждый раз). В большинстве игр у пользователя был выбор между 1, 2 или 3. Это прекрасно и хорошо работает, но я хотел включить его и попросить пользователя ввести слово. Это не работает правильно. Пояснение того, почему это будет работать с пронумерованным вводом, но не вводом слов, будет оценено. Спасибо.

def main():
    import sys


    def run_event(event):
        text, choices = event
        text_lines = text.split("\n")
        for line in text_lines:
            print('' + line)
            print("")
        choices = choices.strip("\n")
        choices_lines = choices.split("\n")
        for num, line in enumerate(choices_lines):
            print('' + line)
            print("")

    print ("")
    print ("You have found yourself stuck within a dark room, inside this room are 5 doors.. Your only way out..")
    print ("")
    print ("Do you want to enter door 1,2,3,4, or 5?")
    print ("")


    EVENT_DOOR3 = ("""
    A dragon awaits you
    ""","""
    'Welcome' remarks the dragon. 'Do you wish to escape?""")

    EVENT_DRAGON = ("""
    'Good choice' says the dragon. Where would you like to escape to?
    ""","""
    1. Just get me out of here!
    2. Where should I escape to?
    """)

    EVENT_DRAGON2 = ("""
    Interesting..
    ""","""
    Test..
    """)

    door = input("> ")
    if door == "3":
      run_event(EVENT_DOOR3)
      dragon = input()
      if dragon in ['yes','Yes']:
        run_event(EVENT_DRAGON)
      elif dragon in ['no','No']:
        run_event(EVENT_DRAGON2)


main()

1 Ответ

0 голосов
/ 28 августа 2018

Эта строка доставит вам некоторые неприятности, потому что она всегда оценивается как True.

if dragon == "yes" or "Yes":
    run_event(EVENT_DRAGON)

Это условие похоже на поговорку:

if (dragon == 'yes') or ('Yes'):
    run_event(EVENT_DRAGON)

Поскольку «Да» - непустая строка, она будет иметь значение True и всегда будет run_event(EVENT_DRAGON). Есть несколько способов исправить это. Сначала вы можете изменить ввод на строчные, чтобы оценить только одно слово:

if dragon.lower() == 'yes':
    run_event(EVENT_DRAGON)

Кроме того, вы можете поместить приемлемые слова в список:

if dragon in ['Yes', 'yes']:
    run_event(EVENT_DRAGON)

Также вы можете проверить каждое слово в отдельности:

if dragon == 'yes' or dragon == 'Yes':
    run_event(EVENT_DRAGON)

Надеюсь, это поможет. Дайте мне знать, если это не сработает.

...