python

Python – Hacer que la computadora adivine un número

El día de hoy vamos a resolver un ejercicio en Python en donde el usuario va a pensar un número y el programa o la computadora va a adivinarlo.

Para ello vamos a usar la búsqueda binaria: vamos a hacer que la computadora piense en un número y se lo muestre al usuario. Luego el usuario le debe decir si acertó, y en caso de que no, le debe decir si es menor o mayor.

Lo interesante aquí es que la computadora adivinará en el menor número de intentos posibles, sin confiar en la suerte.

Explicación del algoritmo

Como te dije, vamos a usar la búsqueda binaria. Obviamente el número que va a pensar el usuario estará dentro de un límite; así que se va a calcular el número intermedio y en caso de no acertar entonces el rango se va a acortar dividiéndolo entre 2.

Digamos que va a ir dividiendo sus posibilidades entre 2. Por ejemplo aquí yo pensé en el número 80 con un rango de 1 a 100 y esta fue la salida:

C:\Users\parzibyte\Desktop>python adivinar_numero.py
El número en el que estás pensando debe estar entre 1 y 100. Yo digo que es 50. ¿Tú qué dices?
1. Es menor que 50
2. Es mayor que 50
3. Adivinaste
Elige: 2
El número en el que estás pensando debe estar entre 51 y 100. Yo digo que es 75. ¿Tú qué dices?
1. Es menor que 75
2. Es mayor que 75
3. Adivinaste
Elige: 2
El número en el que estás pensando debe estar entre 76 y 100. Yo digo que es 88. ¿Tú qué dices?
1. Es menor que 88
2. Es mayor que 88
3. Adivinaste
Elige: 1
El número en el que estás pensando debe estar entre 76 y 87. Yo digo que es 81. ¿Tú qué dices?
1. Es menor que 81
2. Es mayor que 81
3. Adivinaste
Elige: 1
El número en el que estás pensando debe estar entre 76 y 80. Yo digo que es 78. ¿Tú qué dices?
1. Es menor que 78
2. Es mayor que 78
3. Adivinaste
Elige: 2
El número en el que estás pensando debe estar entre 79 y 80. Yo digo que es 79. ¿Tú qué dices?
1. Es menor que 79
2. Es mayor que 79
3. Adivinaste
Elige: 2
El número en el que estás pensando debe estar entre 80 y 80. Yo digo que es 80. ¿Tú qué dices?
1. Es menor que 80
2. Es mayor que 80
3. Adivinaste
Elige: 3

Como puedes ver, va dividiendo entre 2 la cantidad de números en los que pudiste pensar. Así es como usamos la búsqueda binaria para adivinar el número que el usuario pensó.

Adivinar número con Python

Ya expliqué el algoritmo, ahora veamos el código. Simplemente vamos a definir el rango y a partir de él calcular el número que se encuentra a la mitad. El doble símbolo de división // es para dividir y redondear al entero anterior más cercano.

maximo = 100
minimo = 1
maximo_actual = maximo
minimo_actual = minimo
opcion = ""
while opcion != "3":
    numero_adivinado = ((maximo_actual - minimo_actual) // 2) + minimo_actual
    print(
        f"El número en el que estás pensando debe estar entre {minimo_actual} y {maximo_actual}. Yo digo que es {numero_adivinado}. ¿Tú qué dices?")
    opcion = input(
        f"1. Es menor que {numero_adivinado}\n2. Es mayor que {numero_adivinado}\n3. Adivinaste\nElige: ")
    if opcion == "1":
        maximo_actual = numero_adivinado - 1
        if maximo_actual < minimo:
            print("Número fuera de rango")
            break
    if opcion == "2":
        minimo_actual = numero_adivinado + 1
        if minimo_actual > maximo:
            print("Número fuera de rango")
            break

Hacemos un ciclo while que se va a ejecutar mientras la computadora (y el programa en Python) no adivinen el número en el que pensó el usuario.

Dentro del ciclo se va a calcular el número intermedio y preguntar si acertó; en caso de que no entonces se va a preguntar si el número en el que el usuario pensó es menor o mayor, y a partir de ello el rango se acortará a la mitad.

También se comprueba si el número está fuera del rango. Obviamente tú puedes modificar el rango según tus necesidades; entre más corto sea, más rápido adivinará la computadora.

Me parece que el número de intentos que el programa tomará será aproximadamente el logaritmo base 2 de la cantidad de números dentro del rango.

Por ejemplo: si son 100 números, el programa tomará un máximo de 7 intentos (y el log2(100) es 6.64)… pero eso se lo dejo a alguien que sepa más sobre matemáticas.

Para terminar te dejo con más tutoriales de Python en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Imprimir ñ en impresora térmica

En este post te enseñaré a imprimir la letra ñ en una impresora térmica. Voy…

1 día hace

Tramitar acta de nacimiento en línea de manera instantánea

En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…

2 días hace

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 semanas hace

Esta web usa cookies.