É 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:
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:
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:
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.