🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

¡Listo para Copiar y Pegar! Guía de Inicio para Crear un Juego de Adivinar el Número con Python: La Aventura de un Principiante con IA

¡Hola! Bienvenido al mundo de la programación.

Hace solo unos meses, yo era exactamente como tú: no tenía absolutamente ningún conocimiento de programación. No sabía por dónde empezar y me rompía la cabeza cada vez que aparecía un error... Pero con la ayuda de la IA, a base de prueba y error, he conseguido lanzar dos sitios web por mi cuenta (buyonjapan.com, copicode.com).

En este sitio, explico las cosas que "realmente quería saber", los "puntos en los que realmente me atasqué" y "cómo los solucioné", todo desde la perspectiva de un compañero principiante y usando la menor cantidad posible de jerga técnica.

Esta vez, crearemos un "Juego de Adivinar el Número" en Python, un primer paso muy popular en el aprendizaje de la programación. El objetivo de este artículo es solo uno: "Proporcionar un código que funcione perfectamente con solo copiar y pegar, para que puedas experimentar primero el éxito de que 'algo funcione'".

¡Experimentemos juntos la diversión de programar!


¡Primero, prueba la versión final! El código completo y listo para funcionar

Una imagen vale más que mil palabras. Primero, déjame mostrarte el código completo del juego de adivinar el número que construiremos juntos. Copia todo el código de abajo y ejecútalo en tu entorno (como VSCode o Google Colaboratory). ¡La mejor manera de entender de qué va el juego es jugándolo primero!


import random

def number_guessing_game():
  while True:
    print("\n--- Juego de Adivinar el Número ---")
    print("Elige un nivel de dificultad:")
    print("1: Fácil (1-10)")
    print("2: Normal (1-100)")
    print("3: Difícil (1-1000)")
    
    level = input("Introduce la dificultad (1, 2, 3): ")
    
    if level == '1':
      min_num, max_num = 1, 10
    elif level == '2':
      min_num, max_num = 1, 100
    elif level == '3':
      min_num, max_num = 1, 1000
    else:
      print("Opción no válida. Por favor, introduce '1', '2' o '3'.")
      continue

    answer = random.randint(min_num, max_num)
    count = 0
    
    print(f"\n¡Adivina el número entre {min_num} y {max_num}!")

    while True:
      try:
        guess_str = input(f"Tu suposición (Intentos restantes: Ilimitados): ")
        guess = int(guess_str)
        count += 1

        if guess < min_num or guess > max_num:
          print(f"¡Fuera de rango! Por favor, introduce un número entre {min_num} y {max_num}.")
        elif guess < answer:
          print(f"¡Lástima! El número es más grande. (Intentos: {count})")
        elif guess > answer:
          print(f"¡Lástima! El número es más pequeño. (Intentos: {count})")
        else:
          print(f"\n🎉🎉🎉 ¡Correcto! ¡Felicidades! 🎉🎉🎉")
          print(f"El número correcto era {answer}.")
          print(f"Tardaste {count} intentos en adivinarlo.")
          break
      except ValueError:
        print("Error: Por favor, introduce un número. No se permiten letras ni símbolos.")

    while True:
      replay = input("\n¿Quieres jugar de nuevo? (sí / no): ").lower()
      if replay in ["sí", "no"]:
        break
      else:
        print("Entrada no válida. Por favor, introduce 'sí' o 'no'.")
      
    if replay == "no":
      print("¡Gracias por jugar! ¡Hasta la próxima!")
      break

# Iniciar el juego
number_guessing_game()
  

¿Qué tal? Era un juego simple en el que adivinas un número pensado por el ordenador. A partir de la siguiente sección, desglosaremos este código en partes individuales y lo construiremos desde cero.


Paso 1: Construyamos el esqueleto del juego (versión mínima)

Por muy complejo que parezca un programa, en su origen no es más que una combinación de instrucciones simples. Empecemos por construir la parte del "esqueleto" que es mínimamente necesaria para este juego.

Herramienta necesaria: ¿Qué es el módulo `random`?

Para crear un juego de adivinar el número, primero necesitamos que el ordenador elija un número al azar. Para ello, usamos una función estándar de Python llamada "módulo `random`".

Escuchar "módulo" puede sonar complicado, pero piénsalo simplemente como una "caja de herramientas llena de funciones útiles". El módulo `random` contiene funciones para crear números aleatorios, barajar los elementos de una lista y más.

Esta vez usaremos una función llamada `random.randint(a, b)`. Es una instrucción que crea un único número entero aleatorio que está en el rango de `a` a `b`, ambos incluidos. Por ejemplo, si escribes `random.randint(1, 100)`, se elegirá un número al azar entre 1 y 100.

Para más detalles, puedes consultar la documentación oficial de Python, pero por ahora, es suficiente con saber que "existe tal función".

El primer código: ¡Funciona solo con esto!

Ahora, vamos a crear el corazón del juego. Necesitamos los siguientes 4 pasos:

  1. Habilitar el uso del módulo `random` (`import`)
  2. Crear un número de respuesta aleatorio del 1 al 100
  3. Pedir al jugador que introduzca su suposición (`input`)
  4. Comparar la respuesta y la suposición, y mostrar el resultado (`if/else`)

Esto, traducido a código, se ve así:


# 1. Importar el módulo random
import random

# 2. Generar un entero aleatorio del 1 al 100 y guardarlo en la variable 'answer'
answer = random.randint(1, 100)

print("¡Adivina un número del 1 al 100!")

# 3. Recibir la entrada del jugador
guess_str = input("Tu suposición: ")

# Convertir la cadena de input() a un número (entero) que se pueda calcular
guess = int(guess_str)

# 4. Comparar la suposición y la respuesta y mostrar el resultado
if guess == answer:
  print("🎉 ¡Correcto! ¡Felicidades!")
else:
  print(f"¡Lástima! La respuesta correcta era {answer}.")
  

Si ejecutas este código, solo podrás adivinar una vez. Pero ya determina correctamente si aciertas o fallas. Este es el punto de partida de nuestro juego.

Punto clave: El valor que se recibe con `input()` siempre se trata como una "cadena de texto", incluso si introduces un número. Por lo tanto, antes de poder compararlo o hacer cálculos con él como un número, necesitas convertirlo a "entero" usando `int()`. A esto se le llama "conversión de tipo".


Paso 2: Hagamos que el juego se pueda repetir (usando el bucle `while`)

Con el código actual, el juego termina en cuanto haces una suposición. Eso no es un juego, ¿verdad? Vamos a mejorarlo para que puedas seguir adivinando repetidamente hasta que aciertes.

¿Por qué se necesita un bucle?

Cuando quieres repetir el mismo proceso una y otra vez, en programación se usa una estructura llamada "bucle". Python tiene bucles `for` y bucles `while`, pero esta vez usaremos un bucle `while`, que es adecuado para "repetir hasta que se cumpla una condición específica".

¡Mejorando con el bucle `while`!

La condición "hasta que aciertes" se puede reformular como "repetir continuamente mientras no aciertes". Usar `while` para esto le da una forma más parecida a un juego.

Esta vez usaremos la sintaxis `while True:`. Esto significa "repetir infinitamente", pero no te preocupes. Usando una instrucción llamada `break` desde dentro del bucle, puedes salir de él en el momento que quieras.


import random

answer = random.randint(1, 100)
print("¡Adivina un número del 1 al 100!")

# Iniciar un bucle infinito
while True:
  guess_str = input("Tu suposición: ")
  guess = int(guess_str)

  if guess == answer:
    print("🎉 ¡Correcto! ¡Felicidades!")
    break # Si aciertas, sales del bucle
  else:
    print("¡Lástima! Inténtalo de nuevo.")
  

¿Qué te parece? Al ejecutarlo, ahora puedes introducir tu suposición tantas veces como quieras hasta acertar. Si no hubiera un `break`, el programa nunca terminaría, aunque acertaras. Recuerda usar `while True:` y `break` como un par.


Paso 3: Hagamos el juego más amable (función de pistas)

Tal como está ahora, solo te dice "¡Lástima!" y no te da ninguna pista sobre qué número deberías introducir a continuación. Añadamos una función de pistas para que el jugador se divierta más.

Pistas que dicen si es "más grande" o "más pequeño"

Si fallas, decirle al jugador si el número que ha introducido es "más grande" o "más pequeño" que la respuesta hará que el juego sea mucho más interesante. Esto se puede implementar fácilmente añadiendo `elif` (abreviatura de else if) a la instrucción `if`.

Contemos los intentos

Además, si registramos cuántos intentos ha costado acertar y lo mostramos al final, se genera una sensación de logro. Para ello, antes de que comience el bucle, preparamos una variable contador como `count = 0`, y cada vez que se haga una suposición, la incrementamos en 1 con `count += 1`.


import random

answer = random.randint(1, 100)
count = 0 # Inicializar la variable para contar los intentos

print("¡Adivina un número del 1 al 100!")

while True:
  guess_str = input("Tu suposición: ")
  guess = int(guess_str)
  
  count += 1 # Incrementar el contador con cada suposición

  if guess < answer:
    print(f"¡Lástima! El número es más grande. (Intentos: {count})")
  elif guess > answer:
    print(f"¡Lástima! El número es más pequeño. (Intentos: {count})")
  else: # si guess == answer
    print(f"\n🎉 ¡Correcto! ¡Felicidades!")
    print(f"El número correcto era {answer}.")
    print(f"¡Lo adivinaste en {count} intentos!")
    break
  

¡Ahora que se muestran las pistas y el número de intentos, se parece mucho más a un juego de verdad! Usar las `f-string` de Python (poner una `f` delante de la cadena de texto) es muy útil porque permite incrustar fácilmente el valor de las variables dentro de la cadena, como `{nombre_variable}`.


Paso 4: Hacia un programa a prueba de errores (el punto más importante y diferenciador)

Bien, aquí viene la parte más importante de este artículo. El código actual tiene un "punto débil" oculto. Y es que, cuando el jugador introduce algo que no es un número, el programa se cierra forzosamente.

La trampa del `ValueError` en la que caen todos los principiantes

Prueba a ejecutar el código anterior y, en el momento de adivinar el número, introduce letras como "abc" o "hola".

`ValueError: invalid literal for int() with base 10: 'abc'`

Debería haberte aparecido un mensaje de error en rojo como este, y el programa se habrá detenido. Esto ocurre porque la función `int()` sirve para "convertir una cadena de texto en un entero", pero se le ha pasado un texto que no puede convertir (como 'abc'), lo que provoca el error.

Este fue un muro con el que me topé muchas veces cuando era principiante. Un programa que "en mi PC funciona bien, pero en cuanto lo usa otra persona se cierra por un error..." lamentablemente no se puede considerar un "buen programa". Aspiremos a crear un programa "robusto" que no se caiga fácilmente, aunque el usuario cometa un error.

¡Capturando errores con `try-except`!

La sintaxis mágica que nos resuelve este `ValueError` es `try-except`.

Usando esta sintaxis, envolvemos la operación de conversión `int()` en un bloque `try` y escribimos el manejo para el caso de `ValueError` en el bloque `except`, evitando así que el programa se cierre por un error.


import random

answer = random.randint(1, 100)
count = 0

print("¡Adivina un número del 1 al 100!")

while True:
  guess_str = input("Tu suposición: ")
  
  try:
    # Código que podría causar un error
    guess = int(guess_str)
    count += 1

    if guess < answer:
      print(f"¡Lástima! El número es más grande. (Intentos: {count})")
    elif guess > answer:
      print(f"¡Lástima! El número es más pequeño. (Intentos: {count})")
    else:
      print(f"\n🎉 ¡Correcto! ¡Felicidades!")
      print(f"El número correcto era {answer}.")
      print(f"¡Lo adivinaste en {count} intentos!")
      break
      
  except ValueError:
    # Código a ejecutar si ocurre un ValueError
    print("Error: Por favor, introduce un número. No se permiten letras ni símbolos.")
  

Ejecuta este código e intenta introducir "abc" de nuevo. Esta vez, en lugar de pararse con un error, debería mostrarse el mensaje "Error: Por favor, introduce un número." y pedírsete que introduzcas un valor de nuevo.

¡Saber manejar `try-except` es un gran paso para dejar de ser un principiante!

[Columna] Cómo pedirle a una IA que te solucione un error

Cuando estaba aprendiendo a programar, mi mayor ayuda fue la IA. Cuando me salía un error como `ValueError`, copiaba el mensaje de error tal cual y le preguntaba a la IA (en mi caso, Gemini o ChatGPT):

"Estoy practicando programación con Python. Mi programa se detuvo y mostró el siguiente mensaje de error. ¿Cuál es la causa de este error? Y, ¿cómo puedo modificar el código para que el programa no se detenga aunque ocurra este error? Por favor, explícamelo de una manera que un principiante pueda entender."

`ValueError: invalid literal for int() with base 10: 'abc'`

Y la IA, casi sin excepción, me presentaba una solución usando `try-except`. No tenerle miedo a los mensajes de error y usarlos como "material para preguntar" a una IA es el mejor truco para acelerar el autoaprendizaje.


Paso 5: ¡Hagámoslo más divertido! (Funciones avanzadas)

Ahora que tenemos las funciones básicas y el manejo de errores implementados, vamos a añadir algunas funciones más para rematar el juego y dejarlo más pulido. Esta parte es la explicación del contenido del código completo que se mostró al principio del artículo.

Hagamos que se pueda elegir la dificultad

Tener que adivinar siempre de 1 a 100 puede llegar a ser aburrido. Si al empezar el juego permitimos que el jugador elija el rango de números, como "Fácil (1-10)", "Normal (1-100)" o "Difícil (1-1000)", haremos que quiera jugar una y otra vez.

Esto se puede implementar añadiendo un bucle para seleccionar la dificultad antes del bucle principal del juego. Dependiendo de la entrada del jugador, solo hay que cambiar el valor mínimo (`min_num`) y máximo (`max_num`) que se le pasan a `random.randint()` y listo.

Hagamos que se pueda jugar de nuevo

Es un poco molesto tener que volver a ejecutar el programa cada vez que termina una partida. Después de acertar, preguntemos "¿Quieres jugar de nuevo? (sí / no)" y, si la respuesta es "sí", reiniciamos todo el juego desde el principio, y si es "no", lo terminamos.

Para lograr esto, la forma más fácil es envolver toda la lógica del juego que hemos construido hasta ahora en un bucle `while` aún más grande. Y luego, al final del juego, se confirma la intención de volver a jugar y, si la entrada es "no", se rompe el bucle grande con `break` para terminar el programa por completo.

El "código completo" que se presentó al principio de este artículo es el resultado de incorporar todas estas funciones. Te invito a que vuelvas a mirar el código y compruebes qué parte corresponde a cada función.


Conclusión: ¡Experimenta la alegría de crear algo que funciona!

¡Buen trabajo! Esta vez has experimentado el proceso de crear un sencillo juego de adivinar el número desde cero usando Python.

A lo largo de este artículo, has entrado en contacto con los siguientes elementos básicos e importantes de Python:

En el aprendizaje de la programación, intentar construir algo que realmente "funcione" es el camino más corto para mejorar, mucho más que simplemente memorizar la sintaxis. Las pequeñas experiencias de éxito se convierten en una gran motivación para el siguiente paso en tu aprendizaje.

Sería interesante que intentaras modificar el código que hemos creado, por ejemplo, "añadiendo un límite de intentos" o "haciendo las pistas más detalladas", para crear tu propio juego original. ¡Espero que uses este artículo como tu primer paso en el aprendizaje de la programación!

Siguiente paso

Una vez que te hayas familiarizado con la programación básica, ¿por qué no pruebas con el procesamiento de imágenes? Usando la biblioteca de Python "Pillow", puedes crear fácilmente herramientas útiles, como una que redimensiona un montón de imágenes en un instante.

➡️ Siguiente artículo: Construyamos una herramienta de redimensión masiva de imágenes con Python (Pillow)


[Resumen] Sobre el ejemplo de HTML completo y listo para funcionar

Esta sección es un ejemplo de HTML que puedes copiar y pegar cuando publiques contenido como este artículo de blog en tu propio sitio web.

El siguiente código contiene todo el contenido de este artículo (títulos, texto, bloques de código, etc.). Sin embargo, el código Python en sí está pensado para que el lector lo ejecute en su propio entorno de ejecución de Python en su PC (como un terminal o símbolo del sistema).

Nota: El código HTML dentro del siguiente bloque de código tiene los caracteres especiales escapados (p. ej., `<` se convierte en `<`) para que se muestre correctamente en una página web.


<article>
 <h1 style="color: #669df6;">¡Listo para Copiar y Pegar! Guía de Inicio para Crear un Juego de Adivinar el Número con Python: La Aventura de un Principiante con IA</h1>
 <p>
 ¡Hola! Bienvenido al mundo de la programación.
 </p>
 <p>
 Hace solo unos meses, yo era exactamente como tú: no tenía absolutamente ningún conocimiento de programación. No sabía por dónde empezar y me rompía la cabeza cada vez que aparecía un error... Pero con la ayuda de la IA, a base de prueba y error, he conseguido lanzar dos sitios web por mi cuenta (<a href="https://buyonjapan.com" target="_blank" rel="noopener noreferrer" style="color: #8ab4f8;">buyonjapan.com</a>, <a href="https://copicode.com" target="_blank" rel="noopener noreferrer" style="color: #8ab4f8;">copicode.com</a>).
 </p>
 <p>
 En este sitio, explico las cosas que "realmente quería saber", los "puntos en los que realmente me atasqué" y "cómo los solucioné", todo desde la perspectiva de un compañero principiante y usando la menor cantidad posible de jerga técnica.
 </p>
 <p>
 Esta vez, crearemos un "<strong>Juego de Adivinar el Número</strong>" en Python, un primer paso muy popular en el aprendizaje de la programación. El objetivo de este artículo es solo uno: "<strong>Proporcionar un código que funcione perfectamente con solo copiar y pegar, para que puedas experimentar primero el éxito de que 'algo funcione'.</strong>"
 </p>
 <p>
 ¡Experimentemos juntos la diversión de programar!
 </p>

 <hr style="margin: 4rem 0;">

 <h2 style="color: #669df6;">¡Primero, prueba la versión final! El código completo y listo para funcionar</h2>
 <p>
 Una imagen vale más que mil palabras. Primero, déjame mostrarte el código completo del juego de adivinar el número que construiremos juntos. Copia todo el código de abajo y ejecútalo en tu entorno (como VSCode o Google Colaboratory). ¡La mejor manera de entender de qué va el juego es jugándolo primero!
 </p>
 <div class="code-wrapper">
  <button class="copy-btn" data-target="code-block-1">📋 Copiar</button>
  <pre><code id="code-block-1">
import random

def number_guessing_game():
  while True:
    print("\n--- Juego de Adivinar el Número ---")
    print("Elige un nivel de dificultad:")
    print("1: Fácil (1-10)")
    print("2: Normal (1-100)")
    print("3: Difícil (1-1000)")
    
    level = input("Introduce la dificultad (1, 2, 3): ")
    
    if level == '1':
      min_num, max_num = 1, 10
    elif level == '2':
      min_num, max_num = 1, 100
    elif level == '3':
      min_num, max_num = 1, 1000
    else:
      print("Opción no válida. Por favor, introduce '1', '2' o '3'.")
      continue

    answer = random.randint(min_num, max_num)
    count = 0
    
    print(f"\n¡Adivina el número entre {min_num} y {max_num}!")

    while True:
      try:
        guess_str = input(f"Tu suposición (Intentos restantes: Ilimitados): ")
        guess = int(guess_str)
        count += 1

        if guess &lt; min_num or guess &gt; max_num:
          print(f"¡Fuera de rango! Por favor, introduce un número entre {min_num} y {max_num}.")
        elif guess &lt; answer:
          print(f"¡Lástima! El número es más grande. (Intentos: {count})")
        elif guess &gt; answer:
          print(f"¡Lástima! El número es más pequeño. (Intentos: {count})")
        else:
          print(f"\n🎉🎉🎉 ¡Correcto! ¡Felicidades! 🎉🎉🎉")
          print(f"El número correcto era {answer}.")
          print(f"Tardaste {count} intentos en adivinarlo.")
          break
      except ValueError:
        print("Error: Por favor, introduce un número. No se permiten letras ni símbolos.")

    while True:
      replay = input("\n¿Quieres jugar de nuevo? (sí / no): ").lower()
      if replay in ["sí", "no"]:
        break
      else:
        print("Entrada no válida. Por favor, introduce 'sí' o 'no'.")
      
    if replay == "no":
      print("¡Gracias por jugar! ¡Hasta la próxima!")
      break

# Iniciar el juego
number_guessing_game()
  </code></pre>
 </div>
 <p>
 ¿Qué tal? Era un juego simple en el que adivinas un número pensado por el ordenador. A partir de la siguiente sección, desglosaremos este código en partes individuales y lo construiremos desde cero.
 </p>

 <!-- Cada sección continúa de manera similar -->

</article>