¿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).