【问题标题】:Print the correct event, depending on user's input根据用户的输入打印正确的事件
【发布时间】:2018-08-28 15:28:06
【问题描述】:

我正在开发一款基于文本的冒险游戏。本质上,我想根据用户类型返回正确的事件。现在,无论用户键入什么,它都会给出相同的事件(每次都返回 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()

【问题讨论】:

  • if dragon == "yes" or "Yes": 将始终为真,请参阅副本。
  • 感谢您的回复。我按照推荐的方式进行了重组,但现在事件根本无法运行。也许我的事件函数有问题?
  • 为我工作:ibb.co/jhMWq9
  • 我让它工作了,我这边的 ELIF 语句前面有 2 个空格。谢谢您的帮助! @ErTR

标签: python events input tuples adventure


【解决方案1】:

这条线会给你带来一些麻烦,因为它总是评估为True

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

这个条件类似于说:

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

因为 'Yes' 是一个非空字符串,它的计算结果为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)

希望这会有所帮助。如果这不起作用,请告诉我。

【讨论】:

  • 谢谢!是的,这有帮助,但由于某种原因,它没有运行“否”事件.. ELIF 语句会有什么不同吗? @Smidem
  • ELIF 语句的工作方式应该不会有所不同,但我确实注意到您的 elif 缩进很奇怪。空格在 Python 中很重要,所以我会仔细检查所有语句是否处于相同的缩进级别(在 run_event(EVENT_DRAGON2) 之前删除一个空格)。
  • 我也发现了这一点,但即使在我之前正确删除了空间之后,它仍然没有运行该事件。我不确定为什么@Smidem
  • 您是否为 ELIF 语句实现了类似的方法?例如,elif dragon in ['No', 'no]:。否则它不会捕捉到小写的编号。
  • 我做到了,我从上面编辑了我的示例,以准确反映我拥有它的方式。由于某种原因仍然不会运行 EVENT_DRAGON2 @Smidem
猜你喜欢
  • 1970-01-01
  • 2020-11-05
  • 2012-07-20
  • 1970-01-01
  • 2018-11-05
  • 2016-01-21
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
相关资源
最近更新 更多