2

我必须为学校项目制作一个带有基于文本的菜单系统的程序。它包括一个主菜单和多个子菜单。我用大量的 if 语句、打印和输入制作了我当前版本的菜单。但这既不是优雅的解决方案,也不是简单的解决方案。我希望有一种更简单/更好的方法来创建菜单。

更准确地说,我需要一种调用菜单(显示它)的方法,然后我可以选择一个选项,然后执行一些代码。

结构如下所示。

  • 输入数据过滤器
  • 过滤器
    • 添加过滤器
      • 类型 1
      • 类型 2
      • 类型 3
    • 删除过滤器
    • 编辑过滤器。
  • 做计算
    • 意思是
    • 标准变化
    • 等等
  • 创建绘图
  • 出口
4

2 回答 2

1

处理此类问题的最简单方法是递归。一旦建立了有用的数据结构,就可以很容易地递归处理它,因为创建子菜单的工作本质上与创建菜单相同。

在下面的解决方案中,我将菜单定义为元组。菜单中的项目要么是命令,表示为字符串,要么是子菜单,表示为嵌套元组。

menu_data = (
    "Input data filters",
    ("Filters",
     ("Type 1",
      "Type 2",
      "Type 3"),
     "Remove Filter",
     "Edit Filter"),
    "Do Calculations",
    ("Mean",
     "Std Deviation",
     "etc"),
    "Create Plot",
    "Exit"
)

def make_menu(menu, indent=0):
    for item in menu:
        if type(item) == tuple:
            make_menu(item, indent+1)
        else:
            print(" "*indent+item)

make_menu(menu_data)

这应该打印您需要的结构。

于 2016-01-07T22:07:59.883 回答
0

使用绘图功能绘制菜单。您可以导入已经制作的菜单,然后对其进行修改,使其适合您的需求。绘制的窗口可以与您的鼠标和键盘交互以在菜单中移动并选择其中的位置。您可以使它看起来像一个文本菜单,唯一的区别是它在一个窗口中而不是在一个外壳中。图书馆“pygame”有很多这样的。

我希望这有帮助。

于 2016-08-12T19:38:54.277 回答