2016-01-07 32 views
2

我必須爲學校項目製作一個基於文本的菜單系統的程序。它包括一個主菜單和多個子菜單。我已經使用了很多if語句,打印和輸入來創建我當前版本的菜單。但它既不是一個優雅也不容易的解決方案。我希望有一個更簡單/更好的方法來創建菜單。Python 3中更簡單的文本菜單

更確切地說,我需要一個調用菜單(顯示它)的方法,之後我可以選擇一個選項,然後執行一些代碼。

結構如下所示。

  • 輸入數據的過濾器
  • 濾器
    • 添加濾波器
      • 類型1
      • 類型2
      • 類型3
    • 拆下過濾器
    • 編輯過濾器。
  • 做計算
    • 平均
    • 標準變化
  • 創建情節
  • 退出

回答

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) 

這應該打印出您需要的結構。

+0

這不是我正在尋找的東西。這不是打印機菜單的過程,它是與它進行交互的過程。 Sidenote只有菜單的當前層應該可見。我有一個想法,那就是班級將會走出去,但絕對不知道該如何實施。 – Rewned

+0

當你說「與它互動」時,你的意思是如何確保特定菜單條目的選擇運行特定的一段代碼,或者你的意思是顯示頂層條目,然後是與菜單條目相關聯的子菜單一個子菜單?爲問題添加更多細節可能是一個好主意,否則你永遠不會得到你需要的答案。 – holdenweb

+0

增加了一些細節,希望已經足夠了。 – Rewned

0

使用繪圖功能繪製菜單。您可以導入已經制作好的菜單,然後對其進行修改,使其適合您的需要。繪圖窗口可以與您的鼠標和鍵盤進行交互,以在菜單中移動並在其中選擇一個位置。你可以使它看起來像一個文本菜單,只有它在窗口而不是外殼。 圖書館「pygame」有很多這樣的。

我希望這會有所幫助。