Juego en python: adivina numero aleatorio (Parte 1)
Hoy vamos a crear un juego de adivinar un numero aleatorio.
En este juego, el participante va pensar un
numero aleatorio entre el 1 y el 20 y el programa le pedirá que
adivine el numero.
Solo hay 6 intentos, pero con la ayuda del programa que nos dirá si el
numero que ingresamos es mas chico o mas alto. Si el usuario adivina el
numero antes de los 6 intentos, gana.
Este juego nos sirve para
aprender a trabajar los numeros aleatorios,
los bucles y las entradas del usuario. Tambien aprenderemos a convertir
los valores en diferentes tipos de datos (y que se necesita para hacer
esto).
Debido a que este programa es un juego, vamos a llamar al usuario: "jugador".
Esto es lo que le aparecerá al jugador una vez que ejecute el programa, el texto en azul es lo que ingresa el jugador:
Hola! Cual es tu nombre?
Albert
Hola Albert, Bienvenido a mi primer juego....
Elige un numero del 1 al 20
10
Tu numero es mas alto
Elige un numero del 1 al 20
2
Tu numero es mas bajo
Elige un numero del 1 al 20
4
Buen trabajo Albert, lo has logrado con 3 intentos
Aquí les voy a dejar el código fuente de nuestro
juego de adivinar números.
Al agregar este código en tu Editor de archivos (IDLE), asegúrate de
prestar antencion en las sangrías que hay en algunas lineas. Esto es muy
importante para que nuestro juego funcione. Después de ingresar el
código, guarda el juego como adivina.py y puedes ejecutarlo apretando F5
para probar como funciona y comprobar que no tenga errores. Si aparece
algún tipo de error, se paciente y fíjate si todas las lineas coinciden
con las del código original. Ire explicando linea a linea como funciona
nuestro juego.
Nota: es muy importante que tengas instalado python 2.x en tu ordenador,
si tienes la versión 3.x te dará problemas y el programa no va a
correr.
Por las dudas dejo la entrada:
Como instalar python
#Juego de adivinar numero aleatorio
import random
intentos =
0
print (
"JUEGO DE AZAR....")
print (
"Cual es tu nombre?...")
nombre =
raw_input()
x = random.randint (
1,
20)
print (
"Hola " + nombre +
", Bienvenido a mi primer juego...." )
while intentos <
6:
intentos = intentos +
1
print (
"Elige un numero del 1 al 20")
numero =
raw_input()
numero =
int (numero)
if numero < x:
print (
"Tu numero es mas bajo")
if numero > x:
print (
"Tu numero es mas alto")
if numero == x:
break
if numero == x:
print (
"Eres un genio....")
print (nombre +
" lo lograste con %d intentos" % (intentos))
print (
"Nos vemos....")
if numero != x:
print (
"Has perdido, sera en otra oportunidad...")
print (
"Nos vemos")
A pesar de que estamos trabajando en el IDLE, podemos ir haciendo pruebas en el
shell interactivo de python. El shell interactivo es muy practico para ir experimentando con diferentes instrucciones.
Vamos a estudiar el codigo linea a linea:
#Juego de adivinar numero aleatorio
Esta linea es
un comentario. Como ya comente en la entrada anterior, todo lo que se
escriba después del signo # no es interpretado como cogido por el
ordenador. Esto solo nos recuerda que hace el programa, como funciona o
lo que nosotros quisiéramos recordar del código.
import random
Esto es una
declaración de importación. Las
declaraciones no son funciones. Recordemos que las declaraciones son
instrucciones que realizan algo, pero no se evalúan como un valor.
Aunque python incluye muchas funciones integradas, existen algunas
funciones por fuera llamadas módulos. Los módulos son programas en
python que contienen funciones adicionales. Utilizamos las funciones de
estos módulos poniéndolos en nuestros programas con la declaración de
importación. En este caso, estamos importando el modulo random.
La declaración de importación se compone de la palabra clave de importación:
import, seguido del nombre del modulo.
Lo que hacemos en esta linea entonces, es importar el
modulo random, que contiene varias funciones relacionadas con los numeros aleatorios.
intentos =
0
Esta linea crea una variable llamada intentos. Vamos a guardar el numero
de intentos que el jugador hace en esta variable. Dado que el jugador
todavía no ha hecho ningún intento, la inicializamos en 0.
print (
"JUEGO DE AZAR....")
print (
"Cual es tu nombre?...")
nombre =
raw_input()
Las primeras dos lineas llaman a la función print(). Recuerda que una
función es como un mini-programa el programa general ejecuta y cuando
el programa general llama a la función esta se ejecuta. Lo que se
ejecuta es lo que esta dentro de los paréntesis. La primera linea
presenta nuestro juego y la segunda le pregunta el nombre al jugador.
Cuando estas dos lineas se terminan de ejecutar y el jugador escribe su
nombre, el nombre se guardara en la variable nombre. Tenemos que
recordar que el jugador no solo puede poner el nombre, pude escribir lo
que se le ocurra.
x = random.randint (
1,
20)
En la siguiente linea, otra ves llamamos a una función, esta ves es el turno de
randint(), y a continuación, guarda el valor de retorno en la variable x. A esto lo llamamos valor de retorno de la función.
La función randint() devuelve un entero aleatorio
entre los dos enteros que colocamos entre paréntesis, en este caso, un
entero en el 1 y el 20. El numero aleatorio que devuelve la función
randint() es guardado en la variable, y es el numero que el jugador va a
tener que adivinar.
Si quieres, puedes practicar en el shell interactivo de python:
>>>import random
>>>x = random.randint (1, 20)
>>>x
12
>>>x
5
>>>x
9
Cada vez que queramos añadir aleatoriedad a nuestros juegos o programas podemos usar la
función randint(). Recuerda cuantos juegos de mesas utilizan dados, un montón verdad?
También puedes probar diferentes rangos de números para familiarizarte con la función.
Recuerda que el programa necesita que importes random para que randint()
funcione. Esta es la razon por las que los modulos de importación van
al principio del programa.
Los valores escritos entre paréntesis en la función randint son llamados
argumentos. Los argumentos son valores que se pasan a una funcion
cuando se llama a la función. Los argumentos le indican a la función
como comportarse.
Algunas funciones requieren que se pase valor cuando son llamadas. Miremos estas llamadas de funciones:
input()
print ("Hola")
random.randint (1, 20)
La función input no necesariamente usa argumentos,
pero la función print() tiene un argumento y la función randint tiene
dos. Cuando tenemos mas de un argumento los escribimos separados con
comas, como en el ejemplo.
print (
"Hola " + nombre +
", Bienvenido a mi primer juego...." )
En esta linea le damos la bienvenida al jugador, utilizamos tambien el
signo de concatenacion + para sumarle a "Hola" el contenido de la
variable nombre + ", Bienvenido a mi primer juego....".
while intentos <
6:
intentos = intentos +
1
print (
"Elige un numero del 1 al 20")
numero =
raw_input()
numero =
int (numero)
if numero < x:
print (
"Tu numero es mas bajo")
if numero > x:
print (
"Tu numero es mas alto")
if numero == x:
break
En esta linea indicamos el comienzo de un bucle while.
Los bucles son parte de código que se repiten una y otra vez. Pero
antes de aprender los bucles while, tendremos que aprender otros
conceptos. Esos conceptos son los bloques, booleanos, operadores de comparación, condicionales y por ultimo la sentencia while.
Bloques:
Un bloque es una o mas lineas de código agrupados juntos con la misma
cantidad mínima de identacion. Se puede decir que un bloque empieza y
termina mirando la sangría de la linea.
Un bloque comienza cuando tiene sangría de 4 espacios o 1 tabulación.
Cualquier linea de código siguiente que tenga la misma sangría es parte
del mismo bloque.
A continuacion se muestra un diagrama del codigo con los bloques señalados y numerados: