Меню и подменю Python - PullRequest
       26

Меню и подменю Python

0 голосов
/ 05 ноября 2018

Как я могу вернуться из подменю в главное меню? Также я хочу сохранить данные, сгенерированные в подменю.

Главное меню:

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

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Я реализовал оператор 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
0 голосов
/ 05 ноября 2018

Замените ваш код следующим:

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

Вам не нужна опция «Выход» в подменю - вы хотите повторить вложенный цикл (подменю) только в случае неправильного ответа (кроме 1, 2, 3 или 4).

Никаких действий не требуется для сохранения содержимого переменной data, поскольку все выполняемые вами действия находятся внутри вашей функции mainMenu(). Но если вам это нужно вне вашей функции, используйте оператор return data в качестве самого последнего в вашей функции вне цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...