Saltar a contenido

Estructuras de Control

1. Introducción

En esta lección, vamos a aprender a usar las estructuras de control en Python. Comenzaremos con los operadores lógicos, que nos permiten tomar decisiones en función de las condiciones. Luego veremos las estructuras condicionales (if, else) y los bucles (for, while), que nos permiten repetir ciertas acciones en el código. Además, exploraremos las Leyes de Moore, un concepto fundamental en la lógica booleana.

2. Operadores Lógicos

2.1 ¿Qué son los operadores lógicos?

Los operadores lógicos nos permiten comparar valores y tomar decisiones basadas en esos valores. En Python, los operadores lógicos más comunes son:

  • and: Devuelve True si ambas condiciones son verdaderas.
  • or: Devuelve True si al menos una de las condiciones es verdadera.
  • not: Invierte el valor de una condición (si es True, lo convierte en False y viceversa).

Además de los operadores lógicos, también tenemos los operadores de comparación, que nos permiten comparar dos valores:

  • >: Mayor que
  • <: Menor que
  • >=: Mayor o igual que
  • <=: Menor o igual que
  • ==: Igual a
  • !=: Distinto de

2.2 Leyes de Morgan

Las Leyes de Morgan son dos reglas que describen cómo se pueden simplificar expresiones lógicas que incluyen operadores and y or al aplicar negaciones. Son muy útiles en programación para reducir complejidad y evitar errores lógicos.

Primera Ley de Morgan:

\[ \neg(A \, \text{and} \, B) \equiv (\neg A) \, \text{or} \, (\neg B) \]

Esto significa que la negación de una conjunción (lo que sería el and en una expresión) es equivalente a la disyunción de las negaciones de cada uno de los operandos.

Ejemplo en Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
A = True
B = False

# Negación de la conjunción
if not(A and B):
    print("Ley de Morgan: Negación de 'and'")
else:
    print("Expresión original: 'A and B'")

# Ley de Morgan aplicada
if (not A) or (not B):
    print("Ley de Morgan: Negación de 'and' equivalentes a 'or'")

Segunda Ley de Morgan:

\[ \neg(A \, \text{or} \, B) \equiv (\neg A) \, \text{and} \, (\neg B) \]

La negación de una disyunción (lo que sería el or en una expresión) es equivalente a la conjunción de las negaciones de cada uno de los operandos.

Ejemplo en Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
A = True
B = False

# Negación de la disyunción
if not(A or B):
    print("Ley de Morgan: Negación de 'or'")
else:
    print("Expresión original: 'A or B'")

# Ley de Morgan aplicada
if (not A) and (not B):
    print("Ley de Morgan: Negación de 'or' equivalentes a 'and'")

3. Condicionales (if, else)

Las estructuras condicionales permiten ejecutar diferentes bloques de código según ciertas condiciones. En Python, usamos if, elif y else para tomar decisiones basadas en expresiones lógicas.

3.1 Sintaxis básica:

1
2
3
4
5
6
if condición:
    # Bloque de código si la condición es True
elif otra_condición:
    # Bloque de código si la segunda condición es True
else:
    # Bloque de código si ninguna condición anterior es True

Ejemplo:

1
2
3
4
5
6
edad = 18

if edad >= 18:
    print("Eres mayor de edad")
else:
    print("Eres menor de edad")

3.2 Ejemplo con operadores lógicos:

1
2
3
4
5
6
7
edad = 18
tiene_licencia = True

if edad >= 18 and tiene_licencia:
    print("Puedes conducir.")
else:
    print("No puedes conducir.")

4. Bucles (for, while)

Los bucles nos permiten repetir un bloque de código múltiples veces. En Python, tenemos dos tipos de bucles: for y while.

4.1 Bucle for

El bucle for se utiliza cuando sabemos cuántas veces queremos repetir el bloque de código. Lo usamos con rangos de números.

Sintaxis básica:

for variable in range(inicio, fin):
    # Bloque de código que se repite

Ejemplo con for:

for i in range(5):
    print(i)

Este código imprimirá los números del 0 al 4.

4.2 Bucle while

El bucle while se ejecuta mientras se cumpla una condición. Es útil cuando no sabemos cuántas veces se repetirá el bloque de código.

Sintaxis básica:

while condición:
    # Bloque de código que se repite

Ejemplo con while:

1
2
3
4
5
contador = 0

while contador < 5:
    print(contador)
    contador += 1

Este bucle imprimirá los números del 0 al 4.

bucles infinitos

Asegúrate de que la condición del bucle while eventualmente se vuelva False, de lo contrario, el bucle se ejecutará indefinidamente (bucle infinito).


5. Ejercicios Prácticos

1. Calculadora básica:

Crea un programa que pida dos números y calcule su suma, resta, multiplicación y división. Usa condicionales para verificar si el divisor es cero antes de realizar la división.

Ejercicio: Calculadora básica

Crea un programa que pida dos números al usuario y calcule su suma, resta, multiplicación y división. Verifica que el divisor no sea cero antes de realizar la división.

Solución
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
num1 = float(input("Introduce el primer número: "))
num2 = float(input("Introduce el segundo número: "))

suma = num1 + num2
resta = num1 - num2
multiplicacion = num1 * num2
if num2 != 0:
    division = num1 / num2
else:
    division = "No se puede dividir por cero"

print(f"Suma: {suma}")
print(f"Resta: {resta}")
print(f"Multiplicación: {multiplicacion}")
print(f"División: {division}")

2. Cuenta regresiva:

Crea un programa que imprima una cuenta regresiva desde 10 hasta 0.

Ejercicio: Cuenta regresiva

Crea un programa que imprima una cuenta regresiva desde 10 hasta 0.

Solución
1
2
3
4
5
contador = 10

while contador >= 0:
    print(contador)
    contador -= 1  # Decrementamos el contador

3. Paridad de un número:

Ejercicio: Paridad de un número

Escribe un programa que pida un número al usuario y determine si es par o impar utilizando un condicional.

Solución
1
2
3
4
5
6
numero = int(input("Introduce un número: "))

if numero % 2 == 0:
    print("El número es par.")
else:
    print("El número es impar.")

4. Cálculo de la edad:

Crea un programa que pida al usuario su fecha de nacimiento y calcule su edad en función del año actual. Si la edad es mayor o igual a 18, imprime "Eres mayor de edad", de lo contrario imprime "Eres menor de edad".

Ejercicio: Cálculo de la edad

Pide al usuario su año de nacimiento y calcula su edad. Si la edad es mayor o igual a 18, imprime "Eres mayor de edad", de lo contrario imprime "Eres menor de edad".

Necesitaras las funciones del módulo datetime para obtener el año actual:

1
2
3
from datetime import datetime

año_actual = datetime.now().year

Ya veremos más sobre módulos en lecciones futuras.

Solución
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from datetime import datetime

nacimiento = int(input("Introduce tu año de nacimiento: "))
año_actual = datetime.now().year
edad = año_actual - nacimiento

if edad >= 18:
    print("Eres mayor de edad.")
else:
    print("Eres menor de edad.")

5. Cálculo de los primeros N números naturales:

Crea un programa que pida al usuario un número N y calcule la suma de los primeros N números naturales utilizando un bucle for.

Ejercicio: Suma de N números

Pide un número N al usuario y calcula la suma de los primeros N números naturales.

Solución
1
2
3
4
5
6
7
N = int(input("Introduce un número: "))
suma = 0

for i in range(1, N+1):
    suma += i

print(f"La suma de los primeros {N} números naturales es: {suma}")

6. Resumen

En esta lección, hemos aprendido a usar operadores lógicos, condicionales y bucles en Python. Estas estructuras de control nos permiten tomar decisiones y repetir acciones en nuestro código,

Tanda de ejercicios (sin solución)

Tanda de ejercicios

  1. Condicional: Número mayor que 10

    • Escribe un programa que pida un número al usuario. Si el número es mayor que 10, imprime "El número es mayor que 10", de lo contrario, imprime "El número es menor o igual a 10".
  2. Condicional: Edad de entrada

    • Crea un programa que pida la edad del usuario. Si la edad es mayor o igual a 18, imprime "Eres mayor de edad". Si la edad es menor a 18, imprime "Eres menor de edad".
  3. Bucle for: Sumar números en un rango

    • Crea un programa que pida al usuario un número N y luego sume los números del 1 al N usando un bucle for. Imprime el resultado de la suma.
  4. Bucle for: Tabla de multiplicar

    • Crea un programa que pida un número N y luego imprima su tabla de multiplicar del 1 al 10, utilizando un bucle for. El formato debe ser algo como: "N x 1 = N", "N x 2 = 2N", etc.
  5. Bucle while: Contador ascendente

    • Crea un programa que imprima los números del 1 al 10 usando un bucle while.
  6. Bucle while: Cuenta atrás

    • Crea un programa que imprima una cuenta atrás desde 20 hasta 0 utilizando un bucle while.
  7. Condicional y for: Mayor de una lista

    • Crea un programa que tenga una lista de números [3, 12, 45, 7, 23]. Usa un bucle for para recorrer la lista y un condicional para imprimir "Mayor que 10" si el número es mayor que 10.
  8. Condicional y while: Verificar paridad

    • Crea un programa que pida un número al usuario y use un bucle while para verificar si el número es par o impar. Imprime el resultado y termina el bucle.
  9. for y while: Promedio de números

    • Pide al usuario un número N y luego solicita N números. Usa un bucle for para pedir los números y calcula el promedio de esos números. Imprime el resultado.
  10. for y while: Suma hasta alcanzar el número objetivo

    • Crea un programa que use un bucle for para sumar números del 1 al 100. Si la suma alcanza o supera 500, termina el bucle y muestra el número de iteraciones realizadas hasta alcanzar ese total.