【问题标题】:High-level function returning low-level function in python?高级函数在python中返回低级函数?
【发布时间】:2015-10-20 16:29:04
【问题描述】:

基本上,我正在制作一个基于文本的 python 游戏,并且遇到了一个障碍。

玩家可以进入战斗,并且一如既往,你有可能会死(hp为0)。我想要做的是打破游戏的主循环,这是几个功能,大致5-6(从主到战斗系统功能),分散在不同的文件中。

结构如下:

core()
    while True:
        main()
        game_over()
  • core - 在 While 循环中运行 main 函数和 game_over()
  • 主函数运行游戏
  • 主调用事件函数
  • 事件函数根据条件/情况执行某些操作(如果不满足,则不执行任何操作) -> 每当玩家编写“battle”时,该函数都会调用战斗循环
  • 战斗循环中使用了很多函数,但循环的最终作用是检查玩家的 hp 是否大于 0。

我想要做的是,每当玩家的 hp 变为 0(甚至更低)时,main() 函数就会被破坏,以便提示玩家退出游戏或再次运行 main 函数.我希望这种情况的发生与必须在每个函数之后键入 return 和一个值不同。

game_over 函数提示玩家输入“new”并再次启动 main(),因为该函数根本不做任何事情,或者“退出”并且该函数将调用 quit() 并退出游戏。

TL:DR - 我怎样才能从一个较小的函数中分离出来?试图避免返回数组?

【问题讨论】:

  • 你不能“跳出函数” - return 是唯一的方法。

标签: python function return


【解决方案1】:

你可以引发异常

例如

def main():
    if condition:
        raise StopIteration
    else:
        return value


while True:
    main()

对于更复杂的逻辑,您可以引发自定义异常并捕获它们:

class GameOver(Exception):
    pass

class Quit(Exception):
    pass

def main():
    if game_over:
        raise GameOver
    if quit:
        raise Quit
    else:
        return value


while True:
    try:
        main()
    except GameOver:
        game_over()
    except Quit:
        break

【讨论】:

  • 太棒了!它帮助并像魅力一样工作!我想一旦你知道异常和提升类是如何工作的,这毕竟不是那么难!谢谢!
  • 你也可以像这样raise MyCustomException('message') 然后在除了except MyCustomException as error: print error.message 和更多docs.python.org/2/tutorial/errors.html 之外加注
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 2016-08-23
  • 2018-07-17
  • 2010-10-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多