¿Cómo generar números de lotería aleatorios únicos en Python?

PythonBeginner
Practicar Ahora

Introducción

En este tutorial, exploraremos cómo generar números de lotería aleatorios únicos utilizando Python. Esta habilidad es útil para crear simulaciones de lotería, juegos, o incluso para tu propia selección de números cuando juegas a la lotería. Aprenderemos a usar el módulo random de Python para generar números que no se repitan, lo cual es un requisito fundamental para los sistemas de lotería. Al final de este laboratorio, podrás crear tu propio generador de números de lotería que produzca conjuntos de números confiables y únicos.

Este es un Guided Lab, 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 avanzado con una tasa de finalización del 20%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Comprender el Módulo random en Python

El primer paso para crear un generador de números de lotería es comprender cómo Python maneja los números aleatorios. En este paso, exploraremos el módulo random, que está integrado en la biblioteca estándar de Python.

Creando tu Primer Archivo Python

Comencemos creando un nuevo archivo Python en el directorio de nuestro proyecto:

  1. Abre el WebIDE y navega al panel del explorador de archivos.
  2. Navega al directorio ~/project/lottery.
  3. Haz clic derecho en el panel del explorador de archivos y selecciona "Nuevo Archivo".
  4. Nombra el archivo random_basics.py.

En este archivo, exploraremos la funcionalidad básica del módulo random.

Importando el Módulo random

Primero, escribamos código para importar el módulo random y generar algunos números aleatorios básicos:

## Import the random module
import random

## Generate a random float between 0 and 1
random_float = random.random()
print(f"Random float between 0 and 1: {random_float}")

## Generate a random integer between 1 and 10
random_int = random.randint(1, 10)
print(f"Random integer between 1 and 10: {random_int}")

## Generate a random integer from a range with a step
random_range = random.randrange(0, 101, 10)  ## 0, 10, 20, ..., 100
print(f"Random number from range (0, 101, 10): {random_range}")

Guarda el archivo y ejecútalo abriendo una terminal y ejecutando:

cd ~/project/lottery
python3 random_basics.py

Deberías ver una salida similar a esta:

Random float between 0 and 1: 0.7234567890123456
Random integer between 1 and 10: 7
Random number from range (0, 101, 10): 50

Cada vez que ejecutes el programa, obtendrás diferentes números aleatorios.

Comprender la Aleatoriedad y las Semillas (Seeds)

Los generadores de números aleatorios en las computadoras no son verdaderamente aleatorios; son "pseudo-aleatorios". Utilizan un valor inicial llamado "semilla" (seed) para generar una secuencia de números que parecen aleatorios. Si estableces la misma semilla, obtendrás la misma secuencia de números "aleatorios".

Experimentemos con las semillas. Agrega el siguiente código a tu archivo random_basics.py:

## Setting a specific seed
print("\n--- Demonstrating Seeds ---")
random.seed(42)
print(f"First random number with seed 42: {random.randint(1, 100)}")
print(f"Second random number with seed 42: {random.randint(1, 100)}")

## Reset the seed to get the same sequence
random.seed(42)
print(f"First random number with seed 42 again: {random.randint(1, 100)}")
print(f"Second random number with seed 42 again: {random.randint(1, 100)}")

Guarda y ejecuta el programa de nuevo:

python3 random_basics.py

Notarás que después de restablecer la semilla a 42, obtenemos la misma secuencia de números aleatorios nuevamente. Esto demuestra que la aleatoriedad es determinista cuando se usa la misma semilla.

La salida debería verse así:

--- Demonstrating Seeds ---
First random number with seed 42: 24
Second random number with seed 42: 33
First random number with seed 42 again: 24
Second random number with seed 42 again: 33

Para nuestra aplicación de lotería, no estableceremos una semilla específica, permitiendo que Python use una semilla basada en la hora del sistema para una mejor aleatoriedad.

Generando Números de Lotería Básicos

Ahora que entendemos cómo generar números aleatorios en Python, centrémonos en crear números de lotería únicos. La mayoría de los juegos de lotería requieren un conjunto de números únicos dentro de un rango específico.

Usando random.sample para Números Únicos

La función random.sample() es perfecta para generar números de lotería porque selecciona elementos únicos de una secuencia. Creemos un nuevo archivo para experimentar con esta función:

  1. En el WebIDE, navega al directorio ~/project/lottery
  2. Crea un nuevo archivo llamado basic_lottery.py

Agrega el siguiente código al archivo:

import random

## Generate 6 unique numbers from 1 to 49 (common lottery format)
lottery_numbers = random.sample(range(1, 50), 6)
print(f"Your lottery numbers are: {lottery_numbers}")

## Sort the numbers (many lottery displays show numbers in ascending order)
lottery_numbers.sort()
print(f"Your lottery numbers (sorted): {lottery_numbers}")

## Generate a different lottery format (e.g., 5 numbers from 1-69 and 1 from 1-26)
main_numbers = random.sample(range(1, 70), 5)
special_number = random.randint(1, 26)
print(f"Main numbers: {sorted(main_numbers)}, Special number: {special_number}")

Guarda el archivo y ejecútalo en la terminal:

cd ~/project/lottery
python3 basic_lottery.py

Deberías ver una salida similar a:

Your lottery numbers are: [23, 8, 45, 17, 34, 9]
Your lottery numbers (sorted): [8, 9, 17, 23, 34, 45]
Main numbers: [4, 28, 35, 47, 62], Special number: 13

Entendiendo Cómo Funciona random.sample

La función random.sample(population, k) toma dos argumentos:

  1. population - La secuencia de la cual muestrear (en nuestro caso, range(1, 50))
  2. k - El número de elementos únicos a seleccionar (en nuestro caso, 6)

La función asegura que todos los elementos seleccionados sean únicos. Esto es perfecto para los números de lotería, ya que los juegos de lotería requieren números únicos sin repetición.

Método Alternativo: Usando un Conjunto (Set)

Otra forma de generar números de lotería únicos es usar un conjunto (set) de Python, que solo almacena elementos únicos. Agreguemos este enfoque alternativo a nuestro archivo:

## Alternative approach using a set
print("\n--- Alternative approach using a set ---")
lottery_numbers_set = set()

## Keep adding random numbers until we have 6 unique numbers
while len(lottery_numbers_set) < 6:
    lottery_numbers_set.add(random.randint(1, 49))

print(f"Lottery numbers using set: {sorted(lottery_numbers_set)}")

Guarda y ejecuta el programa de nuevo:

python3 basic_lottery.py

Ahora deberías ver una salida adicional:

--- Alternative approach using a set ---
Lottery numbers using set: [4, 12, 27, 39, 44, 49]

Ambos métodos producen el mismo resultado: un conjunto de números aleatorios únicos. La diferencia está en cómo logran esto:

  • random.sample() selecciona elementos únicos de una sola vez
  • El enfoque del conjunto agrega números uno por uno, manejando automáticamente los duplicados

Para la mayoría de las aplicaciones de lotería, random.sample() es más eficiente, pero comprender ambos enfoques te da flexibilidad en tu programación.

Creando una Función Reutilizable para Generar Números de Lotería

Ahora que entendemos cómo generar números aleatorios únicos, creemos una función reutilizable para nuestro generador de números de lotería. Esto hará que nuestro código esté más organizado y nos permitirá generar fácilmente números para diferentes formatos de lotería.

Creando un Archivo de Funciones

Creemos un nuevo archivo con nuestras funciones de lotería:

  1. En el WebIDE, navega al directorio ~/project/lottery
  2. Crea un nuevo archivo llamado lottery_functions.py

Agrega el siguiente código para definir nuestra función generadora de números de lotería:

import random

def generate_lottery_numbers(count, min_num, max_num):
    """
    Generate a specified count of unique random numbers within a given range.

    Args:
        count (int): Number of unique numbers to generate
        min_num (int): Minimum value (inclusive)
        max_num (int): Maximum value (inclusive)

    Returns:
        list: Sorted list of unique random numbers
    """
    ## Validate inputs
    if count > (max_num - min_num + 1):
        raise ValueError(f"Cannot generate {count} unique numbers in range {min_num}-{max_num}")

    ## Generate unique random numbers
    numbers = random.sample(range(min_num, max_num + 1), count)

    ## Sort the numbers
    numbers.sort()

    return numbers

def generate_powerball_numbers():
    """
    Generate numbers for Powerball lottery (5 numbers from 1-69 and 1 from 1-26).

    Returns:
        tuple: (list of main numbers, powerball number)
    """
    main_numbers = generate_lottery_numbers(5, 1, 69)
    powerball = random.randint(1, 26)
    return (main_numbers, powerball)

def generate_mega_millions_numbers():
    """
    Generate numbers for Mega Millions lottery (5 numbers from 1-70 and 1 from 1-25).

    Returns:
        tuple: (list of main numbers, mega ball number)
    """
    main_numbers = generate_lottery_numbers(5, 1, 70)
    mega_ball = random.randint(1, 25)
    return (main_numbers, mega_ball)

Ahora, creemos un archivo para probar nuestras funciones:

  1. En el WebIDE, crea un nuevo archivo llamado test_lottery_functions.py

Agrega el siguiente código para probar nuestras funciones:

import lottery_functions

## Test standard lottery function (e.g., 6 numbers from a range of 1-49)
standard_lottery = lottery_functions.generate_lottery_numbers(6, 1, 49)
print(f"Standard lottery (6 from 1-49): {standard_lottery}")

## Test Powerball function
main_numbers, powerball = lottery_functions.generate_powerball_numbers()
print(f"Powerball: Main numbers: {main_numbers}, Powerball: {powerball}")

## Test Mega Millions function
main_numbers, mega_ball = lottery_functions.generate_mega_millions_numbers()
print(f"Mega Millions: Main numbers: {main_numbers}, Mega Ball: {mega_ball}")

## Test with different parameters
custom_lottery = lottery_functions.generate_lottery_numbers(4, 1, 20)
print(f"Custom lottery (4 from 1-20): {custom_lottery}")

## Test error handling - Try to generate too many numbers
try:
    ## Trying to get 10 numbers from a range of only 5 numbers (impossible)
    impossible_lottery = lottery_functions.generate_lottery_numbers(10, 1, 5)
except ValueError as e:
    print(f"Error caught successfully: {e}")

Ejecuta el archivo de prueba para ver nuestras funciones en acción:

cd ~/project/lottery
python3 test_lottery_functions.py

Deberías ver una salida similar a:

Standard lottery (6 from 1-49): [4, 17, 23, 26, 39, 48]
Powerball: Main numbers: [3, 18, 27, 42, 61], Powerball: 13
Mega Millions: Main numbers: [7, 24, 31, 52, 67], Mega Ball: 9
Custom lottery (4 from 1-20): [2, 9, 15, 19]
Error caught successfully: Cannot generate 10 unique numbers in range 1-5

Beneficios de Usar Funciones

Al crear estas funciones reutilizables, hemos logrado varios objetivos de programación importantes:

  1. Reutilización de Código: Podemos generar números de lotería en cualquier lugar de nuestro programa sin duplicar código.
  2. Validación de Entrada: Nuestra función verifica si la cantidad solicitada de valores únicos es posible en el rango dado.
  3. Abstracción: Hemos ocultado los detalles de implementación dentro de funciones con nombres descriptivos.
  4. Funciones Especializadas: Hemos creado funciones específicas para formatos de lotería comunes.

Este enfoque modular hace que nuestro código sea más mantenible y fácil de entender. En el siguiente paso, usaremos estas funciones para crear una aplicación de lotería completa con una interfaz de usuario.

Construyendo una Aplicación de Lotería Completa

Ahora que tenemos nuestras funciones principales de lotería, construyamos una aplicación completa con una interfaz de usuario. Crearemos una simple interfaz de línea de comandos que permita a los usuarios generar números para diferentes juegos de lotería.

Creando la Aplicación Principal

Creemos nuestro archivo de aplicación principal:

  1. En el WebIDE, navega al directorio ~/project/lottery
  2. Crea un nuevo archivo llamado lottery_app.py

Agrega el siguiente código para crear una aplicación simple basada en menús:

import lottery_functions
import time

def print_header():
    """Display the application header"""
    print("\n" + "=" * 50)
    print("          GENERADOR DE NÚMEROS DE LOTERÍA EN PYTHON")
    print("=" * 50)
    print("Genera números aleatorios para varios juegos de lotería")
    print("-" * 50)

def print_menu():
    """Display the main menu options"""
    print("\nSelecciona un juego de lotería:")
    print("1. Lotería Estándar (6 números del 1-49)")
    print("2. Powerball (5 números del 1-69 + 1 del 1-26)")
    print("3. Mega Millions (5 números del 1-70 + 1 del 1-25)")
    print("4. Lotería Personalizada")
    print("5. Salir")
    return input("\nIngresa tu elección (1-5): ")

def get_custom_lottery_params():
    """Get parameters for a custom lottery from the user"""
    try:
        count = int(input("¿Cuántos números quieres generar? "))
        min_num = int(input("Ingresa el número mínimo: "))
        max_num = int(input("Ingresa el número máximo: "))
        return count, min_num, max_num
    except ValueError:
        print("Por favor, ingresa números válidos")
        return get_custom_lottery_params()

def main():
    """Main application function"""
    print_header()

    while True:
        choice = print_menu()

        if choice == '1':
            ## Standard Lottery
            numbers = lottery_functions.generate_lottery_numbers(6, 1, 49)
            print("\nTus números de Lotería Estándar son:")
            print(f"    {numbers}")

        elif choice == '2':
            ## Powerball
            main_numbers, powerball = lottery_functions.generate_powerball_numbers()
            print("\nTus números de Powerball son:")
            print(f"    Números principales: {main_numbers}")
            print(f"    Powerball: {powerball}")

        elif choice == '3':
            ## Mega Millions
            main_numbers, mega_ball = lottery_functions.generate_mega_millions_numbers()
            print("\nTus números de Mega Millions son:")
            print(f"    Números principales: {main_numbers}")
            print(f"    Mega Ball: {mega_ball}")

        elif choice == '4':
            ## Custom Lottery
            print("\nConfiguración de Lotería Personalizada:")
            count, min_num, max_num = get_custom_lottery_params()
            try:
                numbers = lottery_functions.generate_lottery_numbers(count, min_num, max_num)
                print(f"\nTus números de Lotería Personalizada son:")
                print(f"    {numbers}")
            except ValueError as e:
                print(f"Error: {e}")

        elif choice == '5':
            ## Exit
            print("\n¡Gracias por usar el Generador de Números de Lotería en Python!")
            print("¡Adiós!\n")
            break

        else:
            print("\nElección inválida. Por favor, selecciona 1-5.")

        ## Pause before showing the menu again
        input("\nPresiona Enter para continuar...")

if __name__ == "__main__":
    main()

Ejecuta la aplicación:

cd ~/project/lottery
python3 lottery_app.py

Deberías ver una interfaz de menú como esta:

==================================================
          GENERADOR DE NÚMEROS DE LOTERÍA EN PYTHON
==================================================
Genera números aleatorios para varios juegos de lotería
--------------------------------------------------

Selecciona un juego de lotería:
1. Lotería Estándar (6 números del 1-49)
2. Powerball (5 números del 1-69 + 1 del 1-26)
3. Mega Millions (5 números del 1-70 + 1 del 1-25)
4. Lotería Personalizada
5. Salir

Ingresa tu elección (1-5):

Prueba cada opción para ver cómo funciona nuestra aplicación. Por ejemplo, si seleccionas la opción 1, verás una salida como:

Tus números de Lotería Estándar son:
    [7, 12, 23, 35, 41, 47]

Explorando la Aplicación

Esta aplicación demuestra varios conceptos de programación importantes:

  1. Interfaz de Usuario: Hemos creado un sistema de menú simple basado en texto.
  2. Validación de Entrada: Validamos la entrada del usuario y manejamos los errores de manera adecuada.
  3. Llamadas a Funciones: Usamos nuestras funciones de lotería del paso anterior.
  4. Flujo de la Aplicación: El programa continúa ejecutándose hasta que el usuario elige salir.

La estructura también sigue buenas prácticas de programación:

  • El código está organizado en funciones con propósitos específicos.
  • Usamos el patrón if __name__ == "__main__" para que nuestro script sea importable y ejecutable.
  • La entrada del usuario se maneja con indicaciones claras y validación.

Intenta experimentar con la opción de lotería personalizada (4) para generar números para diferentes formatos de lotería.

Agregando Historial y Estadísticas

Mejoremos nuestra aplicación de lotería agregando la capacidad de rastrear los números generados y mostrar estadísticas simples. Esta función ayudará a los usuarios a identificar patrones o ver qué números se han generado con más frecuencia.

Creando el Módulo de Estadísticas

Primero, creemos un nuevo archivo para rastrear el historial y las estadísticas de los números:

  1. En el WebIDE, navega al directorio ~/project/lottery
  2. Crea un nuevo archivo llamado lottery_stats.py

Agrega el siguiente código:

class LotteryStats:
    def __init__(self):
        """Initialize the statistics tracker"""
        self.history = []  ## List to store all generated sets of numbers
        self.frequency = {}  ## Dictionary to track frequency of each number

    def add_draw(self, numbers):
        """
        Add a new set of numbers to the history and update frequency counts

        Args:
            numbers (list): The lottery numbers that were drawn
        """
        ## Add to history
        self.history.append(numbers)

        ## Update frequency counts
        for num in numbers:
            if num in self.frequency:
                self.frequency[num] += 1
            else:
                self.frequency[num] = 1

    def get_most_common(self, count=5):
        """
        Get the most frequently drawn numbers

        Args:
            count (int): Number of top frequencies to return

        Returns:
            list: List of (number, frequency) tuples
        """
        ## Sort frequency dictionary by values (descending)
        sorted_freq = sorted(self.frequency.items(), key=lambda x: x[1], reverse=True)

        ## Return the top 'count' items (or all if fewer)
        return sorted_freq[:min(count, len(sorted_freq))]

    def get_draw_count(self):
        """Get the total number of draws recorded"""
        return len(self.history)

    def get_last_draws(self, count=5):
        """
        Get the most recent draws

        Args:
            count (int): Number of recent draws to return

        Returns:
            list: List of recent draws
        """
        return self.history[-count:]

Actualizando la Aplicación Principal

Ahora, modifiquemos nuestro archivo lottery_app.py para incluir el seguimiento de estadísticas. Abre el archivo y reemplaza su contenido con:

import lottery_functions
import lottery_stats
import time

def print_header():
    """Display the application header"""
    print("\n" + "=" * 50)
    print("          GENERADOR DE NÚMEROS DE LOTERÍA EN PYTHON")
    print("=" * 50)
    print("Genera números aleatorios para varios juegos de lotería")
    print("-" * 50)

def print_menu():
    """Display the main menu options"""
    print("\nSelecciona una opción:")
    print("1. Lotería Estándar (6 números del 1-49)")
    print("2. Powerball (5 números del 1-69 + 1 del 1-26)")
    print("3. Mega Millions (5 números del 1-70 + 1 del 1-25)")
    print("4. Lotería Personalizada")
    print("5. Ver Estadísticas")
    print("6. Salir")
    return input("\nIngresa tu elección (1-6): ")

def get_custom_lottery_params():
    """Get parameters for a custom lottery from the user"""
    try:
        count = int(input("¿Cuántos números quieres generar? "))
        min_num = int(input("Ingresa el número mínimo: "))
        max_num = int(input("Ingresa el número máximo: "))
        return count, min_num, max_num
    except ValueError:
        print("Por favor, ingresa números válidos")
        return get_custom_lottery_params()

def display_statistics(stats):
    """Display lottery statistics"""
    print("\n" + "=" * 50)
    print("           ESTADÍSTICAS DE LOTERÍA")
    print("=" * 50)

    ## Get basic stats
    draw_count = stats.get_draw_count()
    print(f"Total de sorteos: {draw_count}")

    if draw_count == 0:
        print("Aún no se han generado números de lotería.")
        return

    ## Show most common numbers
    print("\nNúmeros más comunes:")
    for num, freq in stats.get_most_common():
        print(f"  Número {num}: sorteado {freq} veces ({freq/draw_count:.1%})")

    ## Show recent draws
    print("\nSorteos más recientes:")
    for i, draw in enumerate(stats.get_last_draws()):
        print(f"  Sorteo {draw_count-i}: {draw}")

def main():
    """Main application function"""
    print_header()

    ## Initialize the statistics tracker
    stats = lottery_stats.LotteryStats()

    while True:
        choice = print_menu()

        if choice == '1':
            ## Standard Lottery
            numbers = lottery_functions.generate_lottery_numbers(6, 1, 49)
            stats.add_draw(numbers)  ## Add to statistics
            print("\nTus números de Lotería Estándar son:")
            print(f"    {numbers}")

        elif choice == '2':
            ## Powerball
            main_numbers, powerball = lottery_functions.generate_powerball_numbers()
            stats.add_draw(main_numbers + [powerball])  ## Add to statistics
            print("\nTus números de Powerball son:")
            print(f"    Números principales: {main_numbers}")
            print(f"    Powerball: {powerball}")

        elif choice == '3':
            ## Mega Millions
            main_numbers, mega_ball = lottery_functions.generate_mega_millions_numbers()
            stats.add_draw(main_numbers + [mega_ball])  ## Add to statistics
            print("\nTus números de Mega Millions son:")
            print(f"    Números principales: {main_numbers}")
            print(f"    Mega Ball: {mega_ball}")

        elif choice == '4':
            ## Custom Lottery
            print("\nConfiguración de Lotería Personalizada:")
            count, min_num, max_num = get_custom_lottery_params()
            try:
                numbers = lottery_functions.generate_lottery_numbers(count, min_num, max_num)
                stats.add_draw(numbers)  ## Add to statistics
                print(f"\nTus números de Lotería Personalizada son:")
                print(f"    {numbers}")
            except ValueError as e:
                print(f"Error: {e}")

        elif choice == '5':
            ## View Statistics
            display_statistics(stats)

        elif choice == '6':
            ## Exit
            print("\n¡Gracias por usar el Generador de Números de Lotería en Python!")
            print("¡Adiós!\n")
            break

        else:
            print("\nElección inválida. Por favor, selecciona 1-6.")

        ## Pause before showing the menu again
        input("\nPresiona Enter para continuar...")

if __name__ == "__main__":
    main()

Ejecuta la aplicación actualizada:

cd ~/project/lottery
python3 lottery_app.py

Intenta generar varios conjuntos de números de lotería, luego selecciona la opción 5 para ver las estadísticas sobre los números que has generado. Si generas suficientes números, podrías comenzar a ver qué números aparecen con más frecuencia, aunque cada sorteo sea aleatorio.

Entendiendo la Implementación de Estadísticas

Nuestro módulo de estadísticas demuestra varios conceptos avanzados de Python:

  1. Clases: Hemos usado una clase para encapsular la funcionalidad de estadísticas.
  2. Estructuras de Datos: Usamos tanto listas (para el historial) como diccionarios (para la frecuencia).
  3. Funciones Lambda: Usamos una lambda en la función de ordenamiento para ordenar por frecuencia.
  4. Segmentación de Listas: Usamos la segmentación para obtener los sorteos más recientes.

Las estadísticas le dan a nuestra aplicación de lotería más profundidad y utilidad, mostrando cómo un concepto simple (generación de números aleatorios) puede expandirse en una aplicación más completa.

Esto completa nuestra aplicación de generador de números de lotería. Has aprendido a:

  • Generar números aleatorios en Python
  • Asegurar la unicidad de los números aleatorios
  • Crear funciones reutilizables
  • Construir una aplicación completa con interfaz de usuario
  • Rastrear estadísticas e historial

Estas habilidades se pueden aplicar a muchos otros proyectos de programación más allá de la generación de números de lotería.

Resumen

En este tutorial, aprendiste a generar números de lotería aleatorios únicos usando Python. Comenzaste con los conceptos básicos de la generación de números aleatorios, luego construiste componentes cada vez más sofisticados hasta que tuviste una aplicación de lotería completa con seguimiento de estadísticas.

Esto es lo que lograste:

  1. Aprendiste sobre el módulo random de Python y cómo generar varios tipos de números aleatorios.
  2. Usaste random.sample() para generar números de lotería únicos.
  3. Creaste funciones reutilizables para diferentes formatos de lotería.
  4. Construiste una interfaz de línea de comandos para tu aplicación de lotería.
  5. Agregaste seguimiento de estadísticas para analizar la frecuencia y el historial de los números.

Estas habilidades se pueden aplicar a muchos otros escenarios de programación más allá de los números de lotería, como simulaciones, juegos o cualquier aplicación que requiera aleatorización con restricciones.

Ahora tienes una base sólida en la generación de números aleatorios en Python y puedes continuar construyendo sobre estos conceptos en tus futuros proyectos de programación.