2016-05-02 19 views
1

誰かが私が思いついた最善の方法であるユーザー入力に基づいてリストからインデックスを選択するより効率的な方法を見つけ出すのを手伝ってもらえますか?これを行うには、ループで値を手動で設定することしか考えられません。これらのprintステートメントは関数内にあるので、コードを折りたたんでIDEで読みやすくすることができます。ここで私が持っているものだ、任意のフィードバックをいただければ幸いです。Python - ユーザーの入力に基づいてリストから効率的に選択

def LBMethodList(): 
    print "Load balance Methods" 
    print "____________________" 
    print "1 - Round Robin" 
    print "2 - Ratio (member)" 
    print "3 - Least Connections (member)" 
    print "4 - Observed (member)" 
    print "5 - Predictive (member)" 
    print "6 - Ratio (node)" 
    print "7 - Least Connections (node)" 
    print "8 - Fastest (node)" 
    print "9 - Observed (node)" 
    print "10 - Predictive (node)" 
    print "11 - Dynamic Ratio (node)" 
    print "12 - Fastest (application)" 
    print "13 - Least Sessions" 
    print "14 - Dynamic Ratio (member)" 
    print "15 - Weighted Least Connections (member)" 
    print "16 - Weighted Least Connections (node)" 
    print "17 - Ratio (session)" 
    print "18 - Ratio Least Connections (member)" 
    print "19 - Ratio Least Connections (node)" 

class LBMethodConvert: 
LBMethodList() 
ListLBMethod = ["LB_METHOD_ROUND_ROBIN", "LB_METHOD_RATIO_MEMBER", "LB_METHOD_LEAST_CONNECTION_MEMBER", 
       "LB_METHOD_OBSERVED_MEMBER", "LB_METHOD_PREDICTIVE_MEMBER", "LB_METHOD_RATIO_NODE_ADDRESS", 
       "LB_METHOD_LEAST_CONNECTION_NODE_ADDRESS", "LB_METHOD_FASTEST_NODE_ADDRESS", 
       "LB_METHOD_OBSERVED_NODE_ADDRESS", "LB_METHOD_PREDICTIVE_NODE_ADDRESS", "LB_METHOD_DYNAMIC_RATIO", 
       "LB_METHOD_FASTEST_APP_RESPONSE", "LB_METHOD_LEAST_SESSIONS", "LB_METHOD_DYNAMIC_RATIO_MEMBER", 
       "LB_METHOD_L3_ADDR", "LB_METHOD_WEIGHTED_LEAST_CONNECTION_MEMBER", 
       "LB_METHOD_WEIGHTED_LEAST_CONNECTION_NODE_ADDRESS", "LB_METHOD_RATIO_SESSION", 
       "LB_METHOD_RATIO_LEAST_CONNECTION_MEMBER", "LB_METHOD_RATIO_LEAST_CONNECTION_NODE_ADDRESS"] 
LBMethodSelect = input('Please select Load Balance method by number from list above: ') 
MethodConstraint = LBMethodSelect - 1 
LBMethod = ListLBMethod[MethodConstraint:LBMethodSelect] 
+1

あなたは[PEP 8]を読んでなければなりません( https://www.python.org/dev/peps/pep-0008/) – Natecat

+0

Python 2.xで 'input()'を避けるのが最善です。これは本質的に 'eval(raw_input())'であり、潜在的なコード注入リスクを意味します。例えば。入力として '1 + 1'を書くことができ、あなたのスクリプトは' 2'を返します。代わりに 'int(raw_input())'を使用してください。 – jDo

答えて

1

一緒にあなたのデータを保持し、あなたがあなたに必要がある場合、それは拡張できるようにするには、この例を使用することができます。

LBMethods=[ 
    ("Round Robin", "LB_METHOD_ROUND_ROBIN"), 
    ("Ratio (member)", "LB_METHOD_RATIO_MEMBER"), 
    ("Least Connections (member)", "LB_METHOD_LEAST_CONNECTION_MEMBER"), 
    ("Observed (member)", "LB_METHOD_OBSERVED_MEMBER"), 
    ("Predictive (member)", "LB_METHOD_PREDICTIVE_MEMBER"), 
    ("Ratio (node)", "LB_METHOD_RATIO_NODE_ADDRESS"), 
    ("Least Connections (node)", "LB_METHOD_LEAST_CONNECTION_NODE_ADDRESS"), 
    ("Fastest (node)", "LB_METHOD_FASTEST_NODE_ADDRESS"), 
    ("Observed (node)", "LB_METHOD_OBSERVED_NODE_ADDRESS"), 
    ("Predictive (node)", "LB_METHOD_PREDICTIVE_NODE_ADDRESS"), 
    ("Dynamic Ratio (node)", "LB_METHOD_DYNAMIC_RATIO"), 
    ("Fastest (application)", "LB_METHOD_FASTEST_APP_RESPONSE"), 
    ("Least Sessions", "LB_METHOD_LEAST_SESSIONS"), 
    ("Dynamic Ratio (member)", "LB_METHOD_DYNAMIC_RATIO_MEMBER"), 
    ("Weighted Least Connections (member)", "LB_METHOD_WEIGHTED_LEAST_CONNECTION_MEMBER"), 
    ("Weighted Least Connections (node)", "LB_METHOD_WEIGHTED_LEAST_CONNECTION_NODE_ADDRESS"), 
    ("Ratio (session)", "LB_METHOD_RATIO_SESSION"), 
    ("Ratio Least Connections (member)", "LB_METHOD_RATIO_LEAST_CONNECTION_MEMBER"), 
    ("Ratio Least Connections (node)", "LB_METHOD_RATIO_LEAST_CONNECTION_NODE_ADDRESS"), 
] 

def show_methods(method_list): 
    print "Load balance Methods" 
    print "____________________" 
    for index, method in enumerate(method_list): 
     print "%d - %s"%(index+1, method[0]) 

if __name__=='__main__': 
    show_methods(LBMethods) 
    index = input('Please select Load Balance method by number from list above: ') 
    print LBMethods[index-1][1] 
1
  1. あなたがクラスを使用する方法おそらくあなたがそれを望むようではありません。
  2. それはスクリプトである場合、あなたがlist[x:x+1]にアクセスする必要がない、リストから単一の項目を選択するには
  3. __name__=='__main__'
  4. 場合をチェックするのは良いことです。ただ、 list[x]
  5. にアクセスするエントリがあまりにも多くあります:LB_METHOD_L3_ADDR

私は小さな書き換えをした:あなたは一つだけのアイテムを必要とするので、

def LBMethodList(): 
    print "Load balance Methods" 
    print "____________________" 
    print "1 - Round Robin" 
    print "2 - Ratio (member)" 
    print "3 - Least Connections (member)" 
    print "4 - Observed (member)" 
    print "5 - Predictive (member)" 
    print "6 - Ratio (node)" 
    print "7 - Least Connections (node)" 
    print "8 - Fastest (node)" 
    print "9 - Observed (node)" 
    print "10 - Predictive (node)" 
    print "11 - Dynamic Ratio (node)" 
    print "12 - Fastest (application)" 
    print "13 - Least Sessions" 
    print "14 - Dynamic Ratio (member)" 
    print "15 - Weighted Least Connections (member)" 
    print "16 - Weighted Least Connections (node)" 
    print "17 - Ratio (session)" 
    print "18 - Ratio Least Connections (member)" 
    print "19 - Ratio Least Connections (node)" 

if __name__=='__main__': 
    LBMethodList() 
    ListLBMethod = ["LB_METHOD_ROUND_ROBIN", "LB_METHOD_RATIO_MEMBER", "LB_METHOD_LEAST_CONNECTION_MEMBER", 
        "LB_METHOD_OBSERVED_MEMBER", "LB_METHOD_PREDICTIVE_MEMBER", "LB_METHOD_RATIO_NODE_ADDRESS", 
        "LB_METHOD_LEAST_CONNECTION_NODE_ADDRESS", "LB_METHOD_FASTEST_NODE_ADDRESS", 
        "LB_METHOD_OBSERVED_NODE_ADDRESS", "LB_METHOD_PREDICTIVE_NODE_ADDRESS", "LB_METHOD_DYNAMIC_RATIO", 
        "LB_METHOD_FASTEST_APP_RESPONSE", "LB_METHOD_LEAST_SESSIONS", "LB_METHOD_DYNAMIC_RATIO_MEMBER", 
        "LB_METHOD_L3_ADDR", "LB_METHOD_WEIGHTED_LEAST_CONNECTION_MEMBER", 
        "LB_METHOD_WEIGHTED_LEAST_CONNECTION_NODE_ADDRESS", "LB_METHOD_RATIO_SESSION", 
        "LB_METHOD_RATIO_LEAST_CONNECTION_MEMBER", "LB_METHOD_RATIO_LEAST_CONNECTION_NODE_ADDRESS"] 
    LBMethodSelect = input('Please select Load Balance method by number from list above: ') 
    LBMethod = ListLBMethod[LBMethodSelect-1] 
    print LBMethod 
2

あなたは、単純なインデックスを使用していないのはなぜ?かなり確信してスライスはインデックスよりも効率が低い:

LBMethodSelect = int(input('Please select Load Balance method by number from list above: ')) 
LBMethod = ListLBMethod[LBMethodSelect-1] 
関連する問題