Reto día 12/100 con Python
Tags: spanish, codenewbie, 100daysofcode, python
Published: 2021-02-03 04:06:44

#Adivine el número

Continuo con mi aporte explicando un ejercicio muy sencillo donde se debe crear un juego de adivinar un número que el computador va a escoger entre 1 y 100. 

La explicación del código se realizará de acuerdo a la lógica para resolverlo. No se pretende explicar la parte técnica del código. La presente publicación estará dividido en la Descripción del problema donde indicaré las reglas del programa, el pseudocodigo creado para guia del código y finalmente el desarrollo donde se van entregando los pedazos de codigo creados para el funcionamiento del programa. Al final entregaré el enlace al repositorio donde pueden descargar el código completo.


**Descripción del problema:**
* El usuario o jugador debe adivinar un número entre 1 y 100. 
* Existen dos niveles de dificultad: Fácil y Difícil.
* El nivel fácil tendrá 10 oportunidades para adivinar el número.
* El nivel difícil tendrá solo 5 oportunidades para adivinar el número.

**Pseudocódigo**
1. Inicio
2. Obtener un número aleatorio entre 1 y 100 y asignarlo a la variable adivinar_numero.
3. Dar la bienvenida al juego.
4. Solicitar al usuario que elija uno de los dos niveles.
5. Asignar a la variable modo_juego la opción escogida por el usuario.
6. Solicitar al usuario que ingrese un número.
7. Asignar a la variable numero_jugador el número ingresado por el usuario.
8. Si el usuario escogió fácil, tendrá un máximo de 10 oportunidades para adivinar.
   Si no el usuario tendrá un máximo de 5 oportunidades para adivinar.

9. Validar:
    ```
Para i = 1 hasta que i = intentos, incrementa en 1
       Si numero_jugador = adivinar_numero entonces
         Escribir: "Has adivinado el número"
       SinoSi adivinar_numero > numero_jugador
         Escribir: "Muy bajo"
       SinoSi adivinar_numero < numero_jugador
         Escribir: "Muy Alto"
       FinSi
       Si adivinar_numero != numero_jugador AND intentos<10:
         Escribir: "Adivina de nuevo"
       SinoSi adivinar_numero != numero_jugador AND intentos=10:
         Escribir: "Se acabaron las adivinanzas, Perdiste."
       FinSi
    FinPara
    ```
10. FinPrograma

**Desarrollo**
* **Punto 2:**  Se importa la libreria `random` para poder utilizar una de sus funciones llamada `randrange()` que permite obtener un número entero aleatorio entre un rango; para nuestro caso de 1 a 100. Haciendo uso de esta función asignamos el valor a una variable llamada `adivinar_numero`
```python
import random as r

adivinar_numero = r.randrange(1,100)
```
* **Punto 3, 4 y 5:** Se imprime en pantalla el texto de bienvenida al juego y luego, mediante un input se solicita al jugador que escoja la dificultad fácil o difícil y su opción se guarda en la variable `modo_juego`, así mismo el programa decidirá si brinda 5 o 10 oportunidades:
```python
print("Welcome to the Number Guessing Game!")
print("I'm thinking of a number between 1 and 100")
modo_juego = input("Choose a difficulty. Type 'easy' or 'hard':\t")

# Dependiendo de la dificultad se llama a la función adivinar para que tenga en cuenta el número de oportunidades.
def dificultad():
    if modo_juego == 'easy':
        adivinar(10)
    elif modo_juego == 'hard':
        adivinar(5)
    else:
        "Option wrong"

```
* **Punto 6, 7, 8 y 9:** Se crea la función adivinar para que ejecute la lógica principal de adivinar el número. Primero el usuario debe escribir el número con el que espera adivinar que queda almacenado en la variable `numero_jugador`. Luego mediante la variable `x` que contiene el número máximo de intentos, validamos si tenemos intentos disponibles para validar si el jugador adivinó el número con el uso de condicionales `if` y `elif`. Dependiendo de cual de las condicionales cumple se desplegará un mensaje en la pantalla. Si en algun momento adivina despliega el mensaje de felicitaciones y termina el ciclo `for`, pero si por el contrario no adivina dira una pista mencionando si el número ingresado por el jugador es más alto o mas bajo que el número que tiene que adivinar y le pedirá que lo intente de nuevo. Cuando finalicen los intentos el mensaje cambiara mostrando que ha perdido.

```python
def adivinar(x):
    numero_jugador = 0    
    for intentos in range(0,x):
        print(f"You have {x-intentos} attempts remaining to guess the number.")
        numero_jugador = int(input("Make a guess:\t"))
        if intentos < x:
            if adivinar_numero == numero_jugador:
                print(f"You got it! The answer was {adivinar_numero}.")
                break
            elif adivinar_numero > numero_jugador:
                print("Too low")                
            elif adivinar_numero < numero_jugador:
                print("Too high")                
            if adivinar_numero != numero_jugador and intentos < x-1:
                print("Guess again")
            elif adivinar_numero != numero_jugador and intentos == x-1:
                print("You've run out of guesses, you lose.")
```
[Repositorio Github](https://github.com/WilsonGLan/Reto_100_dias/tree/main/dia_12/Proyecto)