Estructuras de Control

Estructuras Condicionales

Las declaraciones condicionales if, elif y else en Python permiten ejecutar bloques de código en función de si una condición es verdadera o falsa. Estas estructuras de control son fundamentales para tomar decisiones en tu código.

Código de Ejemplo

				
					# Declaración if
numero = 10
if numero > 5:
    print("El número es mayor que 5")

# Declaración if-else
numero = 3
if numero > 5:
    print("El número es mayor que 5")
else:
    print("El número es menor o igual que 5")

# Declaración if-elif-else
numero = 5
if numero > 5:
    print("El número es mayor que 5")
elif numero == 5:
    print("El número es igual a 5")
else:
    print("El número es menor que 5")

				
			

Explicación

Declaración if

La declaración if evalúa una condición y, si esa condición es verdadera, ejecuta el bloque de código que sigue a la declaración if.

En el primer ejemplo, se declara una variable numero con el valor 10. La condición if numero > 5 evalúa si el número es mayor que 5. Dado que 10 es mayor que 5, el bloque de código dentro del if se ejecuta, imprimiendo «El número es mayor que 5».

Declaración if-else

La declaración if-else proporciona una bifurcación en el flujo de control del programa. Si la condición del if es verdadera, se ejecuta el bloque de código del if. Si la condición es falsa, se ejecuta el bloque de código del else.

En el segundo ejemplo, se declara una variable numero con el valor 3. La condición if numero > 5 evalúa si el número es mayor que 5. Dado que 3 no es mayor que 5, el bloque de código dentro del else se ejecuta, imprimiendo «El número es menor o igual que 5».

Declaración if-elif-else

La declaración if-elif-else permite manejar múltiples condiciones. La condición del if se evalúa primero. Si es verdadera, se ejecuta su bloque de código. Si es falsa, se evalúa la condición del elif. Si el elif es verdadero, se ejecuta su bloque de código. Si ninguna de las condiciones anteriores es verdadera, se ejecuta el bloque de código del else.

En el tercer ejemplo, se declara una variable numero con el valor 5. La condición if numero > 5 evalúa si el número es mayor que 5. Dado que 5 no es mayor que 5, la condición es falsa y se evalúa la siguiente condición elif numero == 5. Dado que 5 es igual a 5, el bloque de código dentro del elif se ejecuta, imprimiendo «El número es igual a 5».

Resumen

  • if: Evalúa una condición y ejecuta un bloque de código si la condición es verdadera.
  • if-else: Evalúa una condición. Si la condición es verdadera, ejecuta el bloque de código del if; de lo contrario, ejecuta el bloque de código del else.
  • if-elif-else: Evalúa múltiples condiciones secuencialmente. Ejecuta el bloque de código del primer if o elif cuya condición sea verdadera. Si ninguna condición es verdadera, ejecuta el bloque de código del else.

Expresiones condicionales

Las expresiones condicionales en Python, también conocidas como expresiones ternarias, permiten evaluar condiciones y seleccionar una de dos expresiones para su ejecución en una sola línea de código. Son útiles para simplificar el código cuando solo se necesita una declaración if-else simple.

Código de Ejemplo

				
					# Declaración if-else tradicional
edad = 20
if edad >= 18:
    mensaje = "Eres un adulto"
else:
    mensaje = "Eres menor de edad"
print(mensaje)

# Expresión condicional
edad = 16
mensaje = "Eres un adulto" if edad >= 18 else "Eres menor de edad"
print(mensaje)

# Otra expresión condicional con cálculo
a = 5
b = 10
maximo = a if a > b else b
print("El máximo es:", maximo)

				
			

Explicación

Declaración if-else Tradicional

La declaración if-else tradicional permite evaluar una condición y ejecutar un bloque de código basado en si la condición es verdadera o falsa. En el primer ejemplo, se evalúa la edad para determinar si una persona es un adulto o menor de edad. Si la edad es mayor o igual a 18, se asigna el mensaje «Eres un adulto»; de lo contrario, se asigna «Eres menor de edad».

Expresión Condicional

Una expresión condicional permite realizar la misma operación que una declaración if-else en una sola línea de código. 

En el segundo ejemplo, la variable mensaje se asigna a «Eres un adulto» si la condición edad >= 18 es verdadera; de lo contrario, se asigna a «Eres menor de edad». Esto simplifica el código y hace que sea más legible cuando solo se necesita una operación simple.

Otra Expresión Condicional con Cálculo

Las expresiones condicionales también pueden usarse para seleccionar entre dos valores basados en una condición. En el tercer ejemplo, se determina el máximo de dos números a y b utilizando una expresión condicional. Si a es mayor que b, maximo se asigna a a; de lo contrario, se asigna a b.

Resumen

  • Declaración if-else Tradicional: Utiliza bloques de código separados para ejecutar operaciones basadas en si una condición es verdadera o falsa.
  • Expresión Condicional (Ternaria): Permite realizar una evaluación condicional y asignar un valor basado en el resultado en una sola línea de código.

Bucles

Los bucles en Python permiten ejecutar un bloque de código repetidamente mientras se cumpla una condición específica. Python ofrece dos tipos principales de bucles: for y while.

Código de Ejemplo

				
					# Bucle for
for i in range(5):
    print("Iteración for:", i)

# Bucle for con lista
frutas = ["manzana", "plátano", "cereza"]
for fruta in frutas:
    print("Me gusta la", fruta)

# Bucle while
contador = 0
while contador < 5:
    print("Contador while:", contador)
    contador += 1

# Bucle while con condición adicional
numero = 10
while numero > 0:
    print("Número:", numero)
    numero -= 2

# Uso de break y continue en bucles
for i in range(10):
    if i == 3:
        continue  # Saltar la iteración actual
    if i == 7:
        break  # Salir del bucle
    print("Número con break/continue:", i)

				
			

Explicación

Bucle for

El bucle for en Python se utiliza para iterar sobre una secuencia (como una lista, tupla, diccionario, conjunto o cadena). La función range se usa a menudo con for para generar una secuencia de números.

En el primer ejemplo, el bucle for itera cinco veces, de 0 a 4, imprimiendo «Iteración for:» seguido del valor de i en cada iteración.

En el segundo ejemplo, se itera sobre una lista de frutas y se imprime un mensaje con el nombre de cada fruta.

Bucle while

El bucle while ejecuta un bloque de código mientras una condición sea verdadera. La condición se evalúa antes de cada iteración del bucle.

En el tercer ejemplo, el bucle while comienza con contador igual a 0 y se ejecuta mientras contador sea menor que 5. En cada iteración, se imprime el valor de contador y luego se incrementa en 1.

En el cuarto ejemplo, el bucle while comienza con numero igual a 10 y se ejecuta mientras numero sea mayor que 0. En cada iteración, se imprime el valor de numero y luego se decrementa en 2.

Uso de break y continue

Los operadores break y continue permiten controlar el flujo de los bucles de manera más precisa.

  • break: Termina el bucle inmediatamente y pasa a la siguiente declaración después del bucle.
  • continue: Salta la iteración actual y pasa a la siguiente iteración del bucle.

En el último ejemplo, el bucle for itera de 0 a 9. Si el valor de i es 3, se ejecuta continue, lo que salta la impresión y pasa a la siguiente iteración. Si el valor de i es 7, se ejecuta break, lo que termina el bucle inmediatamente.

Resumen

  • Bucle for: Itera sobre una secuencia de elementos, como una lista o un rango de números.
  • Bucle while: Ejecuta un bloque de código mientras una condición sea verdadera.
  • break y continue: break termina el bucle inmediatamente, mientras que continue salta la iteración actual y pasa a la siguiente.

Definición y llamada de funciones

Las funciones en Python son bloques de código reutilizables que realizan una tarea específica. Permiten organizar y estructurar el código de manera más eficiente. Las funciones pueden tomar argumentos y devolver valores.

Código de Ejemplo

				
					# Definición de una función sin parámetros
def saludar():
    print("Hola, Mundo")

# Llamada a la función sin parámetros
saludar()  # Output: Hola, Mundo

# Definición de una función con un parámetro
def saludar_a(nombre):
    print(f"Hola, {nombre}")

# Llamada a la función con un argumento
saludar_a("Ana")  # Output: Hola, Ana

# Definición de una función con múltiples parámetros
def sumar(a, b):
    return a + b

# Llamada a la función con múltiples argumentos
resultado = sumar(5, 3)
print("La suma es:", resultado)  # Output: La suma es: 8

# Definición de una función con valores por defecto
def saludar_persona(nombre="Mundo"):
    print(f"Hola, {nombre}")

# Llamada a la función sin argumentos
saludar_persona()  # Output: Hola, Mundo

# Llamada a la función con un argumento
saludar_persona("Carlos")  # Output: Hola, Carlos

# Definición de una función con argumentos arbitrarios
def listar_frutas(*frutas):
    for fruta in frutas:
        print(fruta)

# Llamada a la función con múltiples argumentos
listar_frutas("Manzana", "Banana", "Cereza")
# Output:
# Manzana
# Banana
# Cereza

# Definición de una función con argumentos clave-valor arbitrarios
def mostrar_info(**info):
    for clave, valor en info.items():
        print(f"{clave}: {valor}")

# Llamada a la función con argumentos clave-valor
mostrar_info(nombre="Ana", edad=25, ciudad="Madrid")
# Output:
# nombre: Ana
# edad: 25
# ciudad: Madrid

				
			

Explicación

Definición de una Función sin Parámetros

Las funciones en Python se definen usando la palabra clave def seguida del nombre de la función y paréntesis (). El bloque de código dentro de la función se define con una indentación. En este caso, la función saludar no toma ningún parámetro y simplemente imprime «Hola, Mundo» cuando se llama.

Llamada a la Función sin Parámetros

Para llamar a una función, se escribe el nombre de la función seguido de paréntesis. En el ejemplo, saludar() llama a la función saludar que imprime «Hola, Mundo».

Definición de una Función con un Parámetro

Las funciones pueden tomar parámetros, que son valores de entrada que se pasan a la función para ser utilizados dentro de ella. En el ejemplo, la función saludar_a toma un parámetro nombre y lo usa para imprimir un saludo personalizado.

Llamada a la Función con un Argumento

Al llamar a una función con parámetros, se pasan los valores correspondientes dentro de los paréntesis. En el ejemplo, saludar_a("Ana") pasa el argumento "Ana" al parámetro nombre.

Definición de una Función con Múltiples Parámetros

Las funciones pueden tomar múltiples parámetros separados por comas. En el ejemplo, la función sumar toma dos parámetros a y b, y devuelve su suma usando la palabra clave return.

Llamada a la Función con Múltiples Argumentos

Al llamar a una función con múltiples parámetros, se pasan los valores correspondientes en el mismo orden. En el ejemplo, sumar(5, 3) pasa los valores 5 y 3 a los parámetros a y b, y la función devuelve 8.

Definición de una Función con Valores por Defecto

Las funciones pueden tener parámetros con valores por defecto, que se utilizan si no se pasa ningún argumento. En el ejemplo, la función saludar_persona tiene un parámetro nombre con un valor por defecto "Mundo".

Llamada a la Función con Valores por Defecto

Se puede llamar a la función con o sin argumentos. Si no se pasa ningún argumento, se usa el valor por defecto. En el ejemplo, saludar_persona() usa el valor por defecto "Mundo", mientras que saludar_persona("Carlos") pasa el argumento "Carlos".

Definición de una Función con Argumentos Arbitrarios

Las funciones pueden aceptar un número variable de argumentos usando *args (argumentos posicionales) o **kwargs (argumentos clave-valor). En el ejemplo, la función listar_frutas toma cualquier número de argumentos posicionales y los itera para imprimir cada uno.

Llamada a la Función con Argumentos Arbitrarios

Se pueden pasar múltiples argumentos al llamar a la función. En el ejemplo, listar_frutas("Manzana", "Banana", "Cereza") pasa tres argumentos que se imprimen dentro de la función.

Definición de una Función con Argumentos Clave-Valor Arbitrarios

Las funciones pueden aceptar un número variable de argumentos clave-valor usando **kwargs. En el ejemplo, la función mostrar_info toma cualquier número de argumentos clave-valor y los itera para imprimir cada par clave-valor.

Llamada a la Función con Argumentos Clave-Valor

Se pueden pasar múltiples argumentos clave-valor al llamar a la función. En el ejemplo, mostrar_info(nombre="Ana", edad=25, ciudad="Madrid") pasa tres pares clave-valor que se imprimen dentro de la función.

Resumen

  • Definición de Funciones: Se usa def seguido del nombre de la función y paréntesis. El bloque de código de la función se define con una indentación.
  • Llamada a Funciones: Se llama a una función escribiendo su nombre seguido de paréntesis.
  • Parámetros y Argumentos: Las funciones pueden tomar parámetros y recibir argumentos al ser llamadas.
  • Valores por Defecto: Se pueden definir valores por defecto para los parámetros.
  • Argumentos Arbitrarios: Se pueden usar *args y **kwargs para aceptar un número variable de argumentos.

Funciones lambda

Las funciones lambda en Python son pequeñas funciones anónimas que se definen con la palabra clave lambda. Se utilizan para crear funciones rápidas y simples sin necesidad de usar def. Las funciones lambda pueden tener cualquier número de argumentos, pero solo una expresión. La expresión se evalúa y devuelve su resultado.

Código de Ejemplo

				
					# Función lambda para sumar dos números
suma = lambda a, b: a + b
print(suma(5, 3))  # Output: 8

# Función lambda para multiplicar por dos
multiplicar_por_dos = lambda x: x * 2
print(multiplicar_por_dos(4))  # Output: 8

# Función lambda sin argumentos
saludar = lambda: "Hola, Mundo"
print(saludar())  # Output: Hola, Mundo

# Función lambda con condición
es_par = lambda n: n % 2 == 0
print(es_par(4))  # Output: True
print(es_par(7))  # Output: False

# Uso de lambda con funciones de orden superior
# Función lambda como argumento para sorted
puntos = [(1, 2), (3, 1), (5, -1)]
puntos_ordenados = sorted(puntos, key=lambda punto: punto[1])
print(puntos_ordenados)  # Output: [(5, -1), (3, 1), (1, 2)]

# Uso de lambda con map
numeros = [1, 2, 3, 4]
cuadrados = list(map(lambda x: x ** 2, numeros))
print(cuadrados)  # Output: [1, 4, 9, 16]

# Uso de lambda con filter
numeros = [1, 2, 3, 4, 5, 6]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares)  # Output: [2, 4, 6]

				
			

Explicación

Función Lambda Básica

Las funciones lambda se definen utilizando la palabra clave lambda seguida de una lista de parámetros, dos puntos : y una expresión. La expresión es evaluada y su resultado es devuelto.

En el primer ejemplo, suma = lambda a, b: a + b define una función lambda que toma dos argumentos a y b y devuelve su suma. La función lambda se llama con suma(5, 3) y devuelve 8.

Función Lambda con un Solo Argumento

Las funciones lambda pueden tener cualquier número de argumentos, incluyendo uno. En el segundo ejemplo, multiplicar_por_dos = lambda x: x * 2 define una función lambda que toma un argumento x y devuelve su valor multiplicado por 2.

Función Lambda sin Argumentos

Las funciones lambda también pueden no tener argumentos. En el tercer ejemplo, saludar = lambda: "Hola, Mundo" define una función lambda que no toma argumentos y devuelve la cadena "Hola, Mundo".

Función Lambda con Condiciones

Las funciones lambda pueden incluir condiciones. En el cuarto ejemplo, es_par = lambda n: n % 2 == 0 define una función lambda que toma un argumento n y devuelve True si n es par (n % 2 == 0), y False en caso contrario.

Uso de Lambda con Funciones de Orden Superior

Las funciones lambda son especialmente útiles cuando se utilizan como argumentos para funciones de orden superior, como sorted, map, y filter.

  • sorted: Ordena una lista basada en una clave. En el quinto ejemplo, sorted(puntos, key=lambda punto: punto[1]) ordena una lista de tuplas puntos basada en el segundo elemento de cada tupla.

  • map: Aplica una función a cada elemento de una lista. En el sexto ejemplo, list(map(lambda x: x ** 2, numeros)) aplica una función lambda que eleva al cuadrado cada elemento de la lista numeros.

  • filter: Filtra elementos de una lista que cumplen con una condición. En el séptimo ejemplo, list(filter(lambda x: x % 2 == 0, numeros)) filtra los elementos de la lista numeros para obtener solo los números pares.

Resumen

  • Definición de Funciones Lambda: Se definen usando la palabra clave lambda, seguida de parámetros, dos puntos : y una expresión.
  • Uso Básico: Las funciones lambda son útiles para crear funciones rápidas y simples sin necesidad de utilizar def.
  • Condiciones: Las funciones lambda pueden incluir condiciones para realizar evaluaciones lógicas.
  • Funciones de Orden Superior: Las funciones lambda son útiles como argumentos para funciones de orden superior como sorted, map, y filter.