Home > Python > Uso de switch en python

¿No hay Switch en python?

Esto es algo que nos ha sorprendido a todos los que alguna vez nos hemos enfrentado al Python. ¿Por qué demonios no hay un switch? ¿Y ahora qué hago yo? ¿Tengo que anidar un montón de if-else?

Pues no, en Python no existe la estructura switch. Sin embargo no es necesario empezar a anidar if-else, podemos usar diccionarios.

Un diccionario en Python es parecido a lo que en otros lenguajes se llama array asociativo y se define así:

edades = { 'Paco': 20, 'Luis': 25, 'Lucas': 30 }

y la forma de usarlo es:

edades['Paco']

por ejemplo:

print ("La edad de Paco es "+str(edades['Paco'])+".")

Que mostrará: La edad de Paco es 20. Entonces, si quisiéramos algo como esto (ojo, recuerda que este código no funciona en Python):

nombre = "Luis"
switch(nombre):
   case 'Paco':
     edad = 20
     break
   case 'Luis':
     edad = 25
     break
   case 'Lucas':
     edad = 30
     break
print edad

tendríamos que hacer:

edades = { 'Paco': 20, 'Luis': 25, 'Lucas': 30 }
nombre = 'Luis'
edad = edades[nombre]
print edad

Bastante sencillo ¿no? Pero, podrías pensar, esto está muy bien para seleccionar valores como en este caso pero ¿y si lo que quiero es llamar a una función o ejecutar un bloque de código? Pues tranquilo, porque se puede. Mira el siguiente ejemplo:

def sumar(a, b):
    return a + b
 
def restar(a, b):
    return a - b
 
def multiplicar(a, b):
    return a * b;
 
num1 = raw_input("Num1: ")
num2 = raw_input("Num2: ")
 
print("Opciones\n1.- Sumar\n2.- Restar\n3.- Multiplicar")
 
operaciones = { '1': sumar, '2': restar, '3': multiplicar}
 
seleccion = raw_input('Escoge una: ')
try:
    resultado = operaciones[seleccion](int(num1), int(num2))
    print resultado
except:
    print("Esa no vale")

Como en este caso no sabemos la opción que va a elegir el usuario (podría teclear un 4 o cualquier otra cosa) tenemos que usar try-except para evitar errores (algo similar al default de los switch-case).