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! y 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:
- 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.
- 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.
- 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.
- 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)
0 comentarios:
Publicar un comentario