É uma das muitas questões que um programador de C, C++, C#, Java, PHP, entre outras, coloca quando começa a programar em python. Mas então como faço um swicth-case em python? A resposta é simples… Não existe swicth-case em python, mas existem sempre alternativas.

Em C podemos definir um switch-case da seguinte forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | switch (opt){ case 'a': printf("Opção a"); break; case 'b': printf("Opção b"); break; case 'c': case 'd': printf("Opção c e d"); break; default: printf("Opção não existe"); } |
Em python podemos usar as instruções if-elif-else para conseguir o mesmo efeito:
1 2 3 4 5 6 7 8 | if opt == 'a': print "Opção a" elif opt == 'b': print "Opção b" elif opt == 'c' or opt == 'd': print "Opção c ou d" else: print "Opção não existe" |
Como podemos verificar não é assim tão complicado. O if e os elifs são os substitutos dos cases, e o else é o substituto para a instrução default. A única desvantagem em relação às instruções switch-case é o facto de termos sempre de fazer a verificação, mas existem vantagens, como é o caso dos breaks, que deixam de ser necessários.
Outra alternativa é usando um dicionário, em que as chaves são as opções, e os valores são funções com as instruções a serem executadas para cada opção:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def opta(): print "Opção a" def optb(): print "Opção b" def optcd(): print "Opção c ou d" def optdefault(): print "Opção não existe" opts = {'a' : opta, 'b' : optb, 'c' : optcd, 'd' : optcd} opts.get(opt, optdefault)() |
Para aceder a uma opção do dicionário foi usada a função get, que tem como parâmetros a chave a que queremos aceder e o valor por defeito, para quando a chave não existe, e que neste caso é a função optdefault.
Os valores que o dicionário contém são referências a funções, portanto temos de executar a função. É por isso que são usados os parênteses no final da chamada da função get.