如何简化python中的elif代码

2024-06-08 05:02:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我是维斯瓦。我用elif命令编写了一个简单的代码。 我将分享代码和条件。。。它正在工作。但我正在寻找简化的程序。如果有同样的结果

输入名称是='AEX\u ABC'、'AEX\u XXX'、'AEX\u YYY'、'CAI\u XXX'、'CAI\u YYY'……等等。, 输出应为AEX\ U 1、AEX\ U 2、AEX\ U 3、CAI\ U 1、CAI\ U 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)

Tags: nametarcarelifinsfavfrecai
2条回答

正如杰西巴克所说,这是一份字典的工作。每当您发现自己创建了一大堆变量名来跟踪一组相关项时,您可能应该改用字典。您可以使用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

您可以将其替换为字典查找。你知道吗

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

相关问题 更多 >

    热门问题