En esta sección, exploraremos estructuras de control avanzadas que permiten manejar el flujo de un programa de manera más eficiente y flexible. Estas estructuras incluyen el uso de switch/case, bucles anidados, y el manejo de excepciones. Al final de esta sección, deberías ser capaz de implementar estas estructuras en tus programas para resolver problemas más complejos.

Contenido

  1. switch/case
  2. Bucles anidados
  3. Manejo de excepciones

  1. switch/case

El switch/case es una estructura de control que permite seleccionar una de varias alternativas basadas en el valor de una expresión. Es una alternativa más legible y eficiente que múltiples sentencias if-else cuando se trata de comparar una variable con varios valores posibles.

Sintaxis

# Ejemplo en Python usando diccionario para simular switch/case
def switch_case_example(value):
    switcher = {
        1: "Opción 1",
        2: "Opción 2",
        3: "Opción 3"
    }
    return switcher.get(value, "Opción no válida")

# Uso
print(switch_case_example(1))  # Salida: Opción 1
print(switch_case_example(4))  # Salida: Opción no válida

Ejercicio

Escribe una función que utilice un switch/case para convertir una calificación numérica (0-10) en una letra (A-F).

def calificacion_a_letra(calificacion):
    switcher = {
        10: 'A',
        9: 'A',
        8: 'B',
        7: 'C',
        6: 'D',
        5: 'E',
        4: 'F',
        3: 'F',
        2: 'F',
        1: 'F',
        0: 'F'
    }
    return switcher.get(calificacion, "Calificación no válida")

# Prueba la función
print(calificacion_a_letra(9))  # Salida: A
print(calificacion_a_letra(4))  # Salida: F

  1. Bucles Anidados

Los bucles anidados son bucles dentro de otros bucles. Son útiles para trabajar con estructuras de datos multidimensionales, como matrices.

Ejemplo

# Imprimir una matriz de 3x3
for i in range(3):
    for j in range(3):
        print(f"({i},{j})", end=" ")
    print()

Ejercicio

Escribe un programa que imprima una tabla de multiplicar del 1 al 5.

for i in range(1, 6):
    for j in range(1, 6):
        print(f"{i} x {j} = {i * j}", end="\t")
    print()

  1. Manejo de Excepciones

El manejo de excepciones permite gestionar errores en tiempo de ejecución de manera controlada, evitando que el programa se detenga abruptamente.

Sintaxis

try:
    # Código que puede causar una excepción
    resultado = 10 / 0
except ZeroDivisionError:
    # Código que se ejecuta si ocurre una excepción
    print("Error: División por cero")
finally:
    # Código que se ejecuta siempre, ocurra o no una excepción
    print("Operación finalizada")

Ejercicio

Escribe una función que divida dos números y maneje la excepción de división por cero.

def dividir(a, b):
    try:
        resultado = a / b
    except ZeroDivisionError:
        return "Error: División por cero"
    else:
        return resultado
    finally:
        print("Operación finalizada")

# Prueba la función
print(dividir(10, 2))  # Salida: 5.0
print(dividir(10, 0))  # Salida: Error: División por cero

Conclusión

En esta sección, hemos explorado estructuras de control avanzadas como switch/case, bucles anidados y el manejo de excepciones. Estas herramientas te permitirán escribir programas más robustos y eficientes. Asegúrate de practicar estos conceptos con los ejercicios proporcionados para reforzar tu comprensión. En el próximo módulo, profundizaremos en funciones y procedimientos, lo que te permitirá modularizar y organizar mejor tu código.

© Copyright 2024. Todos los derechos reservados