2016-04-04 14 views
-4

'da nasıl basitleştirebilirim Viswa. Elif komutunu kullanarak basit bir kod hazırladım. Kodu ve koşulu paylaşıyorum ... işe yarıyor. ama basitleştirilmiş bir program arıyorum. Aynı sonuç için kullanılabilir şeyElyt kodumu python

girişler isimleri = 'AEX_ABC', 'AEX_XXX', 'AEX_YYY', 'CAI_XXX', 'CAI_YYY' .... vs., çıkışı olmalıdır AEX_1, AEX_2, AEX_3 vardır , CAI_1, CAI_2, ....

programı:

 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) 

cevap

3

bir sözlük arama ile değiştirebiliyor.

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

Jesse Bakker'ın dediği gibi, bu bir sözlük için bir iştir. Kendinizi bir grup ilgili öğeyi izlemek için bir grup değişken ad oluşturduğunuzda, muhtemelen bunun yerine bir sözlük kullanmalısınız. , öğesinin sözlüğünü başlatmak için dict literal kullanabilir, ancak tüm öğeler aynı başlangıç ​​değerine sahip olduğunda, aşağıda gösterildiği gibi dict.fromkeys sınıf yöntemini kullanmanız uygundur.

Kod satırlarını kısa tutmak için keys dizesini iki dizeye böldüm: Python otomatik olarak bitişik dize değişmezlerini birleştirecektir, ancak ifadeyi parantez içinde sarmamız gerekir, böylece ayrıştırıcı birden fazla üzerinde devam ettiğini bilir hat.

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)) 

çıkış

AEX_1 
AEX_2 
AEX_3 
ERROR_1 
CAI_1 
CAI_2 
İlgili konular