Estructuras de Control en Python

PythonBeginner
Practicar Ahora

Introducción

En este laboratorio, explorarás las estructuras de control fundamentales de Python: las sentencias condicionales y los bucles. Partiendo de los conocimientos adquiridos en laboratorios anteriores, aprenderás a dirigir el flujo de tus programas mediante el uso de sentencias if-else, bucles for y bucles while. Esta experiencia práctica profundizará tu comprensión de los conceptos básicos de Python y te preparará para desarrollar programas más complejos y dinámicos.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel intermedio con una tasa de finalización del 79%. Ha recibido una tasa de valoraciones positivas del 97% por parte de los alumnos.

Comprendiendo las Sentencias Condicionales

En este paso, aprenderás sobre las sentencias condicionales en Python, específicamente la estructura if-else.

Abre el intérprete de Python escribiendo el siguiente comando en tu terminal:

python

Deberías ver el prompt de Python (>>>), lo que indica que ya te encuentras en el entorno interactivo de Python.

Intérprete de Python

Comencemos con una sentencia if sencilla. En el intérprete de Python, escribe lo siguiente:

age = 20
if age >= 18:
    print("You are an adult.")

Salida:

You are an adult.

Consejos: Ten mucho cuidado con la sangría (indentación), ya que es fundamental en Python. Se recomienda utilizar cuatro espacios para la sangría.

La sentencia if comprueba si la condición age >= 18 es verdadera. Si lo es, se ejecuta el bloque de código sangrado.

Ahora, añadamos una cláusula else:

age = 15
if age >= 18:
    print("You are an adult.")
else:
    print("You are a minor.")

Salida:

You are a minor.

La cláusula else proporciona una acción alternativa que se ejecuta cuando la condición es falsa.

Para condiciones más complejas, podemos utilizar cláusulas elif (abreviatura de "else if"):

age = 65
if age < 13:
    print("You are a child.")
elif age < 20:
    print("You are a teenager.")
elif age < 65:
    print("You are an adult.")
else:
    print("You are a senior citizen.")

Salida:

You are a senior citizen.

Las cláusulas elif te permiten verificar múltiples condiciones de forma secuencial.

Recuerda que la sangría es crucial en Python, ya que define los bloques de código asociados a cada condición.

Explorando los Bucles "For"

En este paso, conocerás los bucles "for", que se utilizan en Python para iterar sobre secuencias (como listas, cadenas de texto o rangos).

Empecemos con un bucle for básico utilizando un rango. En el intérprete de Python, escribe:

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

Salida:

0
1
2
3
4

La función range(5) genera una secuencia de números del 0 al 4, y el bucle recorre cada uno de ellos.

La función range() puede recibir varios argumentos para especificar el inicio, el final y el incremento (paso). Probemos con un rango diferente:

for i in range(1, 10, 2):
    print(i)

Salida:

1
3
5
7
9
  • La función range(1, 10, 2) genera una secuencia que comienza en 1, llega hasta el 10 (sin incluirlo) y avanza de 2 en 2.

Ahora, vamos a iterar sobre una lista:

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(f"I like {fruit}")

Salida:

I like apple
I like banana
I like cherry

En este caso, el bucle recorre cada elemento de la lista fruits.

También puedes usar bucles for con cadenas de texto:

for char in "Python":
    print(char.upper())

Salida:

P
Y
T
H
O
N

Este bucle recorre cada carácter de la palabra "Python".

Combinemos ahora un bucle "for" con sentencias condicionales:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        print(f"{num} is even")
    else:
        print(f"{num} is odd")

Salida:

1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even

Este bucle analiza cada número de la lista e imprime si es par (even) o impar (odd).

Entendiendo el operador módulo (%): El símbolo % se conoce como operador de módulo. Devuelve el resto de la división de un número entre otro. Por ejemplo:

  • 5 % 2 es igual a 1 (porque 5 dividido por 2 es 2 y sobra 1)
  • 4 % 2 es igual a 0 (porque 4 dividido por 2 es 2 y no sobra nada)
  • 10 % 3 es igual a 1 (porque 10 dividido por 3 es 3 y sobra 1)

Al verificar num % 2 == 0, estamos preguntando: "¿Al dividir este número por 2, el resto es 0?". Si la respuesta es afirmativa, el número es par. Si el resto es 1, el número es impar. El símbolo == es el operador de comparación de igualdad que comprueba si dos valores son idénticos.

Comprendiendo los Bucles "While"

En este paso, aprenderás sobre los bucles "while", que se utilizan para repetir un bloque de código mientras una condición específica sea verdadera.

Comencemos con un bucle "while" sencillo. En el intérprete de Python, escribe:

count = 0
while count < 5:
    print(count)
    count += 1

Salida:

0
1
2
3
4

Este bucle continuará ejecutándose mientras la variable count sea menor que 5.

Los bucles "while" son muy útiles cuando no sabes de antemano cuántas veces necesitarás repetir una acción. Aquí tienes un ejemplo:

import random
number = random.randint(1, 10)
guess = 0
while guess != number:
    guess = int(input("Guess a number between 1 and 10: "))
    if guess < number:
        print("Too low!")
    elif guess > number:
        print("Too high!")
    else:
        print(f"Congratulations! You guessed the number {number}!")

Esto crea un juego de adivinanzas sencillo donde el usuario sigue intentándolo hasta acertar el número. Cuando el intento del usuario coincide con el número generado, se ejecuta la cláusula else y se muestra el mensaje de felicitación.

Ten cuidado con los bucles "while": si la condición nunca llega a ser falsa, crearás un bucle infinito. Veamos un ejemplo (pero no lo ejecutes):

while True:
    print("This will print forever!")

Si accidentalmente ejecutas un bucle infinito, puedes detenerlo presionando Ctrl+C.

Puedes usar la sentencia break para salir de un bucle de forma prematura:

count = 0
while True:
    print(count)
    count += 1
    if count >= 5:
        break

Salida:

0
1
2
3
4

Normalmente, este bucle se ejecutaría para siempre, pero la sentencia break lo finaliza cuando count alcanza el valor 5.

Bucles Anidados y Sentencias de Control de Bucles

En este paso, aprenderás sobre los bucles anidados y otras sentencias para controlar el flujo de las repeticiones.

Los bucles anidados son simplemente bucles colocados dentro de otros bucles. Aquí tienes un ejemplo con bucles for:

for i in range(3):
    for j in range(2):
        print(f"i: {i}, j: {j}")

Salida:

i: 0, j: 0
i: 0, j: 1
i: 1, j: 0
i: 1, j: 1
i: 2, j: 0
i: 2, j: 1

El bucle interno completa todas sus iteraciones por cada una de las iteraciones del bucle externo.

Además de break, Python ofrece la sentencia continue, que salta el resto de la iteración actual y pasa directamente a la siguiente:

for num in range(10):
    if num % 2 == 0:
        continue
    print(num)

Salida:

1
3
5
7
9

Este bucle solo imprime los números impares, saltándose los pares.

Entendiendo el operador módulo en este contexto: Aquí, num % 2 == 0 verifica si el número es par. Cuando esta condición es verdadera, la sentencia continue hace que el programa ignore la línea print(num) y vuelva al principio del bucle para el siguiente número. Por lo tanto, solo los números impares llegan a imprimirse.

También puedes usar cláusulas else con los bucles. El bloque else se ejecuta si el bucle termina normalmente (es decir, si no fue interrumpido por un break):

for num in range(2, 10):
    for i in range(2, num):
        if num % i == 0:
            print(f"{num} is not prime")
            break
    else:
        print(f"{num} is prime")

Salida:

2 is prime
3 is prime
4 is not prime
5 is prime
6 is not prime
7 is prime
8 is not prime
9 is not prime

Este ejemplo de bucles anidados sirve para identificar números primos. La cláusula else se ejecuta únicamente cuando el número analizado es primo.

Poniéndolo Todo en Práctica

En este paso final, crearás un programa sencillo que utilice las estructuras de control que has aprendido en este laboratorio.

Sal del intérprete de Python escribiendo exit() o presionando Ctrl+D.

Abre el WebIDE en el entorno de la VM de LabEx.

Interfaz WebIDE LabEx VM

Crea un nuevo archivo llamado number_analyzer.py en el directorio ~/project usando el siguiente comando:

touch ~/project/number_analyzer.py

Abre el archivo recién creado en el editor del WebIDE.

Copia y pega el siguiente código en el archivo:

def analyze_numbers():
    numbers = []
    while True:
        user_input = input("Enter a number (or 'done' to finish): ")
        if user_input.lower() == 'done':
            break
        try:
            number = float(user_input)
            numbers.append(number)
        except ValueError:
            print("Invalid input. Please enter a number or 'done'.")

    if not numbers:
        print("No numbers entered.")
        return

    total = sum(numbers)
    average = total / len(numbers)
    maximum = max(numbers)
    minimum = min(numbers)

    print(f"\nAnalysis of {len(numbers)} numbers:")
    print(f"Total: {total}")
    print(f"Average: {average:.2f}")
    print(f"Maximum: {maximum}")
    print(f"Minimum: {minimum}")

    print("\nNumber distribution:")
    for num in numbers:
        if num < average:
            print(f"{num} is below average")
        elif num > average:
            print(f"{num} is above average")
        else:
            print(f"{num} is equal to average")

if __name__ == "__main__":
    analyze_numbers()

Este programa demuestra el uso de bucles while, bucles for, sentencias condicionales y el manejo de excepciones.

Guarda el archivo (el guardado automático está activado) y ejecútalo con el siguiente comando en la terminal:

python ~/project/number_analyzer.py

Introduce algunos números cuando se te solicite y luego escribe 'done' para ver el análisis. Deberías ver una salida similar a esta:

Enter a number (or 'done' to finish): 10
Enter a number (or 'done' to finish): 20
Enter a number (or 'done' to finish): 30
Enter a number (or 'done' to finish): 40
Enter a number (or 'done' to finish): done

Analysis of 4 numbers:
Total: 100.0
Average: 25.00
Maximum: 40.0
Minimum: 10.0

Number distribution:
10.0 is below average
20.0 is below average
30.0 is above average
40.0 is above average

Si cometes un error al introducir los datos, puedes volver a ejecutar el programa. Esta es una excelente oportunidad para practicar la ejecución de scripts de Python varias veces con diferentes entradas.

Resumen

En este laboratorio, has explorado las estructuras de control fundamentales de Python: sentencias condicionales (if-else), bucles for y bucles while. Has aprendido a dirigir el flujo de tus programas, a tomar decisiones basadas en condiciones y a iterar sobre secuencias de datos. También has practicado el uso de bucles anidados y sentencias de control como break y continue.

Estas estructuras de control constituyen la base de la programación en Python, permitiéndote crear programas más sofisticados y dinámicos. Has comprobado cómo estos conceptos pueden combinarse para desarrollar una herramienta útil que analiza un conjunto de números introducidos por el usuario.

A medida que avances en tu aprendizaje de Python, verás que estas estructuras son esenciales para resolver una gran variedad de problemas de programación. Recuerda practicar estos conceptos con regularidad, experimentando con diferentes combinaciones y casos de uso para consolidar tus conocimientos.