2016-04-04 71 views
-4

我是viswa。我使用elif命令準備了一個簡單的代碼。 我將分享代碼和條件......它正在工作。但我正在尋找簡化的程序。如果有什麼可用於相同的結果如何簡化Python中的elif代碼

輸入名稱= 'AEX_ABC', 'AEX_XXX', 'AEX_YYY', 'CAI_XXX', 'CAI_YYY' ......等, 輸出應該是AEX_1,AEX_2,AEX_3 ,CAI_1,CAI_2,....

程序:

 name=(<user input>) 
     AEX,CAI,CAR,CCA,CEL,CLM,CRE,ECH,FAV,FRE,GMP,INS,ROU,TAR,TAV,UAV,VEH,ERROR=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
     name=part._name.split('_') 
     if name[0]=='AEX': 
      AEX+=1 
      i=AEX 
     elif name[0]=='CAI': 
      CAI+=1 
      i=CAI 
     elif name[0]=='CAR': 
      CAR+=1 
      i=CAR 
     elif name[0]=='CCA': 
      CAR+=1 
      i=CCA 
     elif name[0]=='CEL': 
      CEL+=1 
      i=CEL 
     elif name[0]=='CLM': 
      CLM+=1 
      i=CLM 
     elif name[0]=='CRE': 
      CRE+=1 
      i=CRE 
     elif name[0]=='ECH': 
      ECH+=1 
      i=ECH 
     elif name[0]=='FAV': 
      FAV+=1 
      i=FAV 
     elif name[0]=='FRE': 
      FRE+=1 
      i=FRE 
     elif name[0]=='GMP': 
      GMP+=1 
      i=GMP 
     elif name[0]=='INS': 
      INS+=1 
      i=INS 
     elif name[0]=='ROU': 
      ROU+=1 
      i=ROU 
     elif name[0]=='TAR': 
      TAR+=1 
      i=TAR 
     elif name[0]=='TAV': 
      TAV+=1 
      i=TAV 
     elif name[0]=='UAV': 
      UAV+=1 
      i=UAV 
     elif name[0]=='VEH': 
      VEH+=1 
      i=VEH 
     else: 
      ERROR+=1 
      i='error'+str(ERROR) 
     output=name[0]+i 
     print(output) 

回答

3

您可以用字典查找替換此。

stock_indices={<all stock indices:0>} 
error=0 
try: 
    stock_indices[input[0]]+=1 
except KeyError: 
    error+=1 
1

正如傑西巴克爾所說,這是一本字典的工作。每當你發現自己創建一大堆變量名來跟蹤一組相關的項目時,你應該使用字典來代替。您可以使用使用dict文字初始化字典,但是當所有項目具有相同的初始值時,使用dict.fromkeys類方法很方便,如下所示。

爲了保持代碼行簡短,我將keys字符串拆分爲兩個字符串:Python會自動連接相鄰的字符串文字,但我們需要用括號將表達式包裝起來,以便解析器知道它會繼續多於一個線。

keys = ('AEX,CAI,CAR,CCA,CEL,CLM,CRE,ECH,FAV,FRE,' 
    'GMP,INS,ROU,TAR,TAV,UAV,VEH,ERROR'.split(',')) 

stock_indices = dict.fromkeys(keys, 0) 

def update_stock(name): 
    key = name.partition('_')[0] 
    if key not in stock_indices: 
     key = 'ERROR' 
    val = stock_indices[key] + 1 
    stock_indices[key] = val 
    return key, val 

# Test 
test = (
    'AEX_ABC', 
    'AEX_XXX', 
    'AEX_YYY', 
    'BAD_ZZZ', 
    'CAI_XXX', 
    'CAI_YYY', 
) 

for name in test: 
    key, val = update_stock(name) 
    print('{0}_{1}'.format(key, val)) 

輸出

AEX_1 
AEX_2 
AEX_3 
ERROR_1 
CAI_1 
CAI_2