Como fazer switch-case em python?

Publicado por Hugo Pires / Os comentários estão fechados

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

Python Logo

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.

Na categoria Programação, Tutoriais

Tutorial de Python - Introdução
Efeito engraçado com imagens em HTML
Filtro de SPAM usando apenas uma conta de GMail
HTML - Tabela com cabeçalho e tamanho fixo

Os comentários estão fechados