2017-08-28 4 views
0

私は大規模なコード実行を簡略化するためにインタラクティブなテキストメニューを実装しようとしていますが、完全に機能するように構造化する方法がわかりません。今私は、メインメニュー、2つのサブメニュー、および終了機能を持っています。私は特定のコードを実行するためにサブメニューが必要ですが(私は後で結びます)、オプション1と2がいつでも私の2つのサブメニューに行く方法で書いています。私のメニューで。これをコード化する最良の方法は何ですか?最初のオプションとして1を選択した場合、#1または#2のスポットに対して他のオプションを満たしていますか?私は明らかに1と2の定数値を取り除く必要がありますが、私はそれが必要な方法で動作するようにする方法がわかりません。Pythonのインタラクティブメニュー

import time, sys, os 

    # Main definition - constants 
    menu_actions = {} 


    ##Menu Functions 

    def main_menu(): 
     os.system('cls') 
     print "" 
     print 30 * "-", "MENU", 30 * "-" 
     print "1. Batch Deployment" 
     print "2. Single Deployment" 
     print "3. List Tickets" 
     print "0. Exit/Quit" 
     print 66 * "-" 
     print "" 
     choice = raw_input(" Make a selection from the menu >> ") 
     exec_menu(choice) 


    def batch_menu(): 
     os.system('cls') 
     print "Batch Deployment\n" 

     print "1. Run All In Progress Sonic Deployments" 
     print "9. Back" 
     print "0. Quit" 
     print "" 
     choice = raw_input(" >> ") 
     exec_menu(choice) 
     return 


    def ticket_menu(): 
     os.system('cls') 
     print "Choose Task to Deploy...\n" 

     print "9. Back" 
     print "0. Quit" 
     print "" 
     choice = raw_input(" >> ") 
     exec_menu(choice) 
     return 


    def exec_menu(choice): 
     os.system('cls') 
     ch = choice.lower() 
     if ch == '': 
      menu_actions['main_menu']() 
     else: 
      try: 
       menu_actions[ch]() 
      except KeyError: 
       print "Invalid selection, please try again.\n" 
       time.sleep(3) 
       menu_actions['main_menu']() 
     return 


    def back(): 
     menu_actions['main_menu']() 

    # Menu definition 
    menu_actions = { 
     'main_menu': main_menu, 
     '1': batch_menu, 
     '2': ticket_menu, 
     '9': back, 
     '0': exit, } 

    # Menu Logic 

    if __name__ == "__main__": 
     # Launch main menu 
     main_menu() 

答えて

0

最終的にわかったので、これをマークしました。メニューを分岐させるロジックはmain_menu関数に追加されました。私はそれらをメニュー全体で同じにしたいので、ここでは定数を残して終了しました。