Python 如何将输入添加到基于文本的程序中

Python 如何将输入添加到基于文本的程序中,python,python-3.x,Python,Python 3.x,我使用Python创建了一个基于文本的RPG。当你执行这个程序的时候,它会给你一个介绍,最后我让用户决定去1。左2。对三。中间的每个地方都有一个独特的项目需要完成游戏,这意味着如果你去右边,它会看到你是否有一个特定的项目附加到你的包。如果您没有它,您将返回到主要部分,以决定再次去哪里。也就是说,中间是我希望用户能够立即攻击一条龙的主要部分,这样他们就可以输,或者如果准备好了必要的附加物品,就可以赢!现在你没有攻击的选择,你只需要到达龙并且获胜,所以没有输球。任何关于如何在整个游戏中加入输入的提示

我使用Python创建了一个基于文本的RPG。当你执行这个程序的时候,它会给你一个介绍,最后我让用户决定去1。左2。对三。中间的每个地方都有一个独特的项目需要完成游戏,这意味着如果你去右边,它会看到你是否有一个特定的项目附加到你的包。如果您没有它,您将返回到主要部分,以决定再次去哪里。也就是说,中间是我希望用户能够立即攻击一条龙的主要部分,这样他们就可以输,或者如果准备好了必要的附加物品,就可以赢!现在你没有攻击的选择,你只需要到达龙并且获胜,所以没有输球。任何关于如何在整个游戏中加入输入的提示都会很有帮助。如果需要更多信息,我很乐意与大家分享:

在攻击龙之前,我试着实现一个输入,但是它在循环中被抓住了,所以即使你获得了所有的物品,你也会回到主地牢。下面是一段代码片段,用于一个想法的最终副本

def valid_输入提示,选项1,选项2: 尽管如此: 响应=inputprompt.lower 如果选项1响应: 打印暂停您使用+strWeapon+对抗龙 打印暂停,但强度不够 为了打败龙,他使用火息 他把你烧成灰烬! 你输了! 再玩一次 打破 elif选项2的响应: 打印暂停艺术选择!你回到主地牢 地牢游戏 打破 其他: 对不起,再试一次 返回响应 def中土牢: 打印你暂停你去中间的地牢。 打印\u暂停几分钟后, 你发现自己在一条+龙+前面! 这就是为什么你需要这些魔力。 如果MagicRune在包中: 暂停打印向导很好地训练了你,你现在获得 +strMagicRune+的力量! 打印你暂停你攻击龙! 如果MagicRune不在包中: 你没有获得必要的魔法力量。 print_pauseIt看起来您需要一个卷轴或更大的功率!。 打印你暂停你回到主地牢。 地牢游戏 龙_健康=100 计数=0 当dragon_health>0时: 玩家造成的伤害=random.randint0,60 打印暂停如果你击中龙并造成{玩家伤害}伤害 龙之健康=龙之健康-玩家造成的伤害 print_pausefdragon health现在是{dragon_health} 计数=计数+1 打印暂停如果你在{count}次尝试中成功击败了龙,你就赢了! 再玩一次 def地下城游戏: 通过= 如果“启动”不在副本中: 显示介绍 地下城。附加“开始” 通过时!='1'和通道!='2'和通道!='3': 通道=输入1。左\n 2.对\n 3.中\n 如果段落==“1”: 左图地牢 以利夫语段==“2”: 右图地牢 以利夫语段==“3”: 中土牢 地牢游戏
因此,基本上,这个输出将拒绝你,直到你进入左地牢和右地牢,在那里你会看到魔术师在包里:这将让你进入龙而循环,赢得游戏。

你需要重新安排你的代码一点。以下是如何更改输入函数:

def valid_input(prompt, option1, option2):
    while True:
        response = input(prompt).lower()
        if option1 in response:
            return option1
        elif option2 in response:
            return option2
        else:
            print("Sorry, try again")
现在,它返回用户选择的选项,并让调用代码确定如何处理该信息。这使得它实际上是可重用的。你可以这样称呼它:

chosen = valid_input("Wanna attack the dragon?", "yes", "no")
if chosen == "yes":
    # do that stuff
else:
    # do other stuff
您还需要解决另一个问题:处理函数调用就像处理goto语句一样。当您试图调试代码时,这会给您带来痛苦,而且还会导致难以跟踪错误

例如,您不应该再次调用play_来重新启动代码。相反,设置代码结构,这样就不必这样做。例如

def dungeon_game():  
  while True:
    # set up initial game state here, e.g.
    bag = ["sword", "potion"]
    # call main game logic function
    dungeon()    
    # that function returned, so the game is over.
    want_to_play = input("play again?")
    if want_to_play == "no":
      # if we don't break, the While loop will start the game again
      break

def dungeon():
  # blah blah dragon attack
  if (whatever):
    print("You got killed. Game over.")
    return # goes back to dungeon_game()
  else:
    print("You won the fight")
  # code for the next thing that happens...

if __name__ == "__main__":
  dungeon_game()

您的问题到底是什么?如何实现不陷入循环的输入?我是否创建包含输入的函数并使用函数调用?我一直坚持要为用户添加一个决策。你说你尝试实现一个输入,但它在循环中被卡住了。我不确定那到底是什么意思。你能发布你尝试过的代码并解释它是如何失败的吗?是的,让我们编辑代码。我将向您展示我创建的并希望在上面的现有代码中使用的函数。因此,我实际上没有调用上面的函数,因为它不起作用,但这是我想要做的一个想法。我想问一下,在中卫地下城的打印声明之后,他们是否想要攻击。如果他们一开始没有附录
它会杀死他们,并询问他们是否想再玩一次。否则,当物品被正确地附加后,让他们能够使用连接了random.choice的物品,然后穿过中_地牢的其余部分,在那里他们将攻击龙。不确定这是否可行,或者是否有更简单的方法。谢谢哦,这更有意义。我真的很感谢你的意见。我会看看我能做些什么来改变它。谢谢你花时间帮忙:所以我有一个左边的地下城,右边的地下城和中间的地下城。我将在底部分享我的地下城游戏,向你展示我是如何拥有它的,因为它通过所有三个地下城来附加物品。所以我在列出清单时遇到了麻烦。你是说我应该把这个结构全部去掉,对吗?你的地下城游戏看起来基本上没问题,除了最后一行,你从里面的地下城游戏中称之为地下城游戏。一般来说,如果您使用调用的函数列表来访问正在执行的代码行,例如dungeon_game->middle_dungeon,则永远不应调用该列表中已经存在的函数。如果你在中区地牢,你想回到地牢游戏,只要从中区地牢返回即可。如果你在地牢游戏中,想重新开始,设置一个循环来完成。等等,明白了,我已经改变了。现在我只需要弄清楚当我再次使用play_功能时如何让游戏复位。-再次感谢您的时间和投入。