菜单和子菜单 python

Menu and submenu python

如何 return 从子菜单转到主菜单? 另外我想保留子菜单中生成的数据。

主菜单:

1. Load data
2. Filter data
3. Display statistics
4. Generate plots
5. Quit

在选项 2 上我有一个子菜单:

1. S. enterica
2. B. cereus
3. Listeria
4. B. thermosphacta
5. Quit
def mainMenu():  
    menuItems = np.array(["Load data", "Filter data", "Display statistics", "Generate plots", "Quit"])
    while True:
        choice = displayMenu(menuItems)
        if choice == 1:
            filename = input("Please enter filename: ")
            data = dataLoad(filename)
        elif choice == 2:
            menuItems = np.array(["S. enterica", "B. cereus", "Listeria", "B. thermosphacta", "Quit"])
            while True: 
                choice = displayMenu(menuItems)
                if choice == 1:
                    data = data[data[:,2] == 1] # 1 - S. enterica
                elif choice == 2:    
                    data = data[data[:,2] == 2] # 2 - B. cereus
                elif choice == 3:   
                    data = data[data[:,2] == 3]  # 3 - Listeria
                elif choice == 4:    
                    data = data[data[:,2] == 4] # 4 - B. thermosphacta
                elif choice == 5:
                    return data
                continue
        if choice == 3:
            statistic = input("Please enter statistic: ")
            print (dataStatistics(data, statistic))
        elif choice == 4:
            dataPlot(data)
        elif choice == 5:
            break

将您的代码替换为:

def mainMenu():  
    mainMenuItems = np.array(["Load data", "Filter data", "Display statistics", 
                              "Generate plots", "Quit"])
    subMenuItems  = np.array(["S. enterica", "B. cereus", "Listeria", 
                              "B. thermosphacta"])
    while True:
        choice = displayMenu(mainMenuItems)
        if choice == 1:
            filename = input("Please enter filename: ")
            data = dataLoad(filename)
        elif choice == 2:
            while True: 
                subchoice = displayMenu(subMenuItems)
                if subchoice in (1, 2, 3, 4):
                    data = data[data[:,2] == subchoice]
                    break 
                # The answer is not a correct one
                continue
        elif choice == 3:     # instead of if
            statistic = input("Please enter statistic: ")
            print (dataStatistics(data, statistic))
        elif choice == 4:
            dataPlot(data)
        elif choice == 5:
            break

您的子菜单中不需要 "Quit" 选项 - 您想要重复嵌套循环(子菜单)仅在答案错误的情况下(其他为 1、2、3 或 4)。

不需要任何操作来保存您的 data 变量的内容,因为您执行的所有操作都在您的 mainMenu() 函数中。但是,如果您在函数之外需要它,请使用 return data 语句作为函数中的 最后一个 ,在任何循环之外。

我在子菜单中实现了 break 语句,并将 menuItems 放在循环中。这有效并且在子菜单(子选择)中创建的数据可以在主菜单选项 3 和 4 中使用。

import numpy as np
from displayMenu import *
from dataLoad import *
from dataStatistics import *
from dataPlot import *
from bFilter import *

def mainMenu():  
while True:
    menuItems = np.array(["Load data", "Filter data", "Display statistics",
                          "Generate plots", "Quit"])
    choice = displayMenu(menuItems)
    if choice == 1:
        filename = input("Please enter filename: ")
        data = dataLoad(filename)
    elif choice == 2:
        while True:
            menuItems = np.array(["S. enterica", "B. cereus", "Listeria", 
                                 "B. thermosphacta", "Back to main menu"])
            subchoice = displayMenu(menuItems)
            if subchoice in (1, 2, 3, 4):
                data = data[data[:,2] == subchoice]
            if subchoice == 5:
                break 
            continue
    elif choice == 3:
        statistic = input("Please enter statistic: ")
        print (dataStatistics(data, statistic))
    elif choice == 4:
        dataPlot(data)
    elif choice == 5:
        break