Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何简化python中的elif代码_Python - Fatal编程技术网

如何简化python中的elif代码

如何简化python中的elif代码,python,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

我是维斯瓦。我使用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)
name=()
AEX、CAI、CAR、CCA、CEL、CLM、CRE、ECH、FAV、FRE、GMP、INS、ROU、TAR、TAV、UAV、VEH,误差=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
名称=零件名称拆分(“”)
如果名称[0]=“AEX”:
AEX+=1
i=AEX
elif名称[0]=“CAI”:
CAI+=1
i=CAI
elif名称[0]=“汽车”:
汽车+=1
i=汽车
elif名称[0]=“CCA”:
汽车+=1
i=CCA
elif名称[0]=“CEL”:
CEL+=1
i=CEL
elif名称[0]=“CLM”:
CLM+=1
i=CLM
elif名称[0]=“CRE”:
CRE+=1
i=CRE
elif名称[0]=“ECH”:
ECH+=1
i=ECH
elif名称[0]=“FAV”:
FAV+=1
i=FAV
elif名称[0]=“FRE”:
FRE+=1
i=FRE
elif名称[0]=“GMP”:
GMP+=1
i=GMP
elif名称[0]=“INS”:
INS+=1
i=INS
elif名称[0]=='ROU':
ROU+=1
i=ROU
elif名称[0]=“TAR”:
焦油+=1
i=焦油
elif名称[0]=“TAV”:
TAV+=1
i=TAV
elif名称[0]=“UAV”:
无人机+=1
i=无人机
elif名称[0]=='VEH':
VEH+=1
i=车辆
其他:
错误+=1
i='error'+str(错误)
输出=名称[0]+i
打印(输出)

您可以将其替换为字典查找

stock_indices={<all stock indices:0>}
error=0
try:
    stock_indices[input[0]]+=1
except KeyError:
     error+=1
股票指数={}
错误=0
尝试:
股票指数[输入[0]]+=1
除KeyError外:
错误+=1

正如杰西·巴克所说,这是一份字典的工作。每当您发现自己创建了一大堆变量名来跟踪一组相关项时,您可能应该改用字典。您可以使用
dict
literal来初始化字典,但是当所有项都具有相同的初始值时,可以方便地使用
dict.fromkeys
类方法,如下所示

为了缩短代码行,我将
字符串拆分为两个字符串: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