6 nov. 2016

Python 06. Adivina el número


Python 06: Adivina el número


En este apartado vamos a hacer un programa que se basa en lo aprendido anteriormente y lo lleva un paso más allá. Vamos a aplicar la función randint para que el ordenador escoja un número entre 1 y 20 y daremos añ usuario seis intentos para conseguir adivinarlo. Ademas, el ordenador aplicará comparaciones para darle pistas al jugador y decirle si se pasa por arriba o por abajo del número secreto.

El código del programa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#Este es un juego de adivinar el número
import random

intentos=0

print('¡Hola! ¿Cuál es tu nombre?')
nombre = input()

numero=random.randint(1,20)
print('Bueno, '+nombre+', piensa un número entre 1 y 20.')

while intentos<6:
    print ('¡Adivínalo! Tienes 6 intentos')
    adivina=input()
    adivina=int(adivina)

    intentos=intentos+1
   
    if adivina<numero:
        print ('¡Demasiado pequeño!')

    if adivina>numero:
        print('¡Demasiado grande!')

    if adivina==numero:
        break

if adivina==numero:
    intentos=str(intentos)
    print('Fabuloso, '+nombre+', acertaste el número en '+intentos+' intentos. ¡Estarás orgulloso-a!')

if adivina!=numero:
    numero=str(numero)
    print('¡Qué fatalidad '+nombre+' ! Yo estaba pensando en el número '+numero)
Guarda el programa con el nombre adivinar número.py y pruébalo

El resultado:

Si escribiches todo correctamente, el resultado tiene que dar algo como esto:



Por partes:
La primera y segunda lineas  son un comentario y la sentencia de importación del módulo random. Como siempre, dejamos lineas en blanco para facilitar la lectura.

1. #Este es un juego de adivinar el número
2. import random
3.

En la linea 4 declaramos una variable intentos a la que asignamos el valor 0. Esta variable la creamos porque necesitamos llevar la cuenta de los intentos que hace el jugador, para que sólo le permitamos 6.

 4. intentos=0

Las líneas 6 y 7 son la presentación

6. print('¡Hola! ¿Cuál es tu nombre?')
7. nombre = input()

En la linea 9 hacemos que el ordenador piense un número entre 1 y 20 con
random.randint(1,20) y guardamos el resultado en la variable numero. En la linea 10 imprimimos el saludo y la propuesta de juego.

9. numero=random.randint(1,20)
10. print('Bueno, '+nombre+', piensa un número entre 1 y 20.')

El bucle while:
La orden while que aparece en la linea 12 da comienzo a un bucle, una parte de código que se ejecuta siempre que se cumpla una condición. "While", en inglés, significa "mientras que", o sea que la linea le indica al ordenador que "mientras que intentos sea menor que 6, haz todo lo que viene debajo. Si intentos es igual o mayor que 6, sáltate todo lo que viene debajo hasta la linea break"



12. while intentos<6:
 
La sentencia while compare el valor de intentos con el entero 6, se ejecuta el bucle (lineas 13-27) mientras esta condición sea True.

Las lineas 13 y 14 imprimen la cadena ¡Adivínalo! recogen lo que el jugador introduzca en la variable adivina.

13.     print ('¡Adivínalo! Tienes 6 intentos')
14.     adivina=input()

La linea 15 sirve para convertir el tipo de variable. Ya explicamos que, para Python, no el lo mesmo el entero 6 que la cadena '6', y cuando el jugador introduce un valor
input(), este se almacenado como una cadena. Con la función int() convertimos el valor introducido por el jugador en adivina en un entero. 
(Por ejemplo si el jugador introduce el valor 15, la función input() almacenará como una cadena '15'. Con la función int() convertimos esa cadena '15' en el entero 15.)

15.     adivina=int(adivina)

La linea 17 hace lo que se conoce como establecer un incremento de variable o contador. Es decir, que cada vez que el ordenador ejecute esta instrucción, la variable
intentos va aumentando su valor en 1. Esto lo hacemos para llevar la cuenta de cuantas veces ha tenido el jugador que adivinar el número. Si llega a 6 intentos le daremos el mensaje de consolación.

17.     intentos=intentos+1
 

Las lineas 19-26 emplean la sentencia if, que ya conoces del apartado anterior, para evaluar si el número introducido por el jugador es mayor, menor o igual que el número secreto. Primeir evaluará la condición que ponemos en primero lugar, y si esta es True, el programa ejecutará la instrucción correspondiente. Si la condición es False pasará al siguiente if, y repetirá a operación. 
Si acertamos, la liña 25 evaluará un True, y la instrucción que se ejecuta será break. Esto indica al programa que se debe salir del bucle en el que estábamos, sin necesidad de esperar que el número de intentos sea 6 o mayor, como establecía la condición while intentos<6 que abría el bucle.

19.     if adivina<numero:
20.         print ('¡Demasiado pequeño!')
21.
22.     if adivina>numero:
23.         print('¡Demasiado grande!')
24.
25.     if adivina==numero:
26.         break

Después de que se ejecute la instrucción
break, o de que la condición while intentos<6 evalúe un False, salimos del bucle y llegamos a la linea 28. En esta linea comprobamos si el número introducido por el jugador (adivina) es igual que el número secreto. Si es así, en la linea 29, convertimos en cadena el entero de intentos mediante la función str(intentos), que funciona igual que explicamos antes con int() pero a la inversa. Hacemos esto porque a función print(), en Python, sólo admite variables que almacenen cadenas. 
La linea 30 imprimirá el mensaje de felicitación para el jugador/a.
Las lineas 32, 33 y 34 funcionan de manera semejante, pero reconociendo el valor introducido como diferente del número secreto y proporcionando un mensaje de consolación.

28. if adivina==numero:
29.     intentos=str(intentos)
30.     print('Fabuloso, '+nombre+', acertaste el número en '+intentos+' intentos. ¡Estarás orgulloso-a!')
31.
32. if adivina!=numero:
33.     numero=str(numero)
34. print('¡Qué fatalidad '+nombre+' ! Yo estaba pensando en el número '+numero)

Ejercicios:
  1. Cambia los parámetros del juego, para que el número elegido esté entre 5 y 30, que se permita un número mayor o menor de intentos y cambia también los mensajes de felicitación y consolación.

  2. Introduce las instrucciones precisas para que el programa informe al jugador/a de cuantos intentos lleva y cuantos le quedan, cada vez que este quiera adivinar.

  3. Introduce una variable puntos que al comienzo tenga un valor determinado y que, cada vez que el jugador falle, se le reste una cantidad concreta de puntos. Al final del programa, el mensaje de felicitación o consolación debe informarle de cuantos puntos ha obtenido.

  4. Haz un programa que calcule el índice de masa corporal (IMC) del jugador/a? 
  • Tendrá que pedir el peso en Kg y la altura en m, y luego calcular el índice con la fórmula: IMC=Kg/(m*m). 
  • Tienes que tener muy en cuenta las conversiones de tipos de datos con las funciones str() e int()
  • Ten en cuenta también que como el peso y el IMC van a tener decimales debemos utilizar la orden float() que sirve para indicar que es un número con decimales.
  •  Debes hacer que el IMC salga con sólo 2 decimales; utiliza para ello la orden round(cantidad, nº de decimales)


Twitter Facebook Tuenti LinkedIn gmail Favorites More