Buscar en el sitio


Contacto

Minformatica

E-mail: MaEzGaudio@gmail.com

Python(Adivina el numero)

06.11.2013 04:38
 

Introducción a los comandos de Python

 
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:
 
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.  
Como he dicho en las entradas anteriores, estas primeras publicaciones nacen del libro: https://inventwithpython.com/chapter4.html que me parecido muy interesante para aprender python diseñando juegos.
 
El tipo de datos booleano
El tipo de datos booleanos tiene solo dos valores: True o False. Estos valores distinguen las mayúsculas de las minúsculas y no son valores de cadenas, es decir, no necesitan comillas. Vamos a utilizar los valores booleanos con los operadores de comparación para formar condiciones. 
 
Operadores de comparación
while intentos < 6:
Los operadores de comparación se utilizan para comparar dos valores y evaluar si la condición es Verdadera (True) o Falsa (False).
Una condición es una expresión que combina dos valores con un operador de comparación y evalúa a un valor booleano. Una condición es solo otro nombre para una expresión que se evalúa como Verdadera o Falsa. 
En nuestro juego almacenamos el valor 0 en la variable intentos. Debido a que 0 es menor que 6, esta condición se evalúa como verdadera, osea, el booleano True.
 
Probando en el shell interactivo de python:
 
>>> 0 < 6
True
>>> 6 < 0
False
>>> 50 < 34
False
>>> 5 < 455
True
 
A seguir probando operadores de comparación:
 
 
>>> 10 == 10
True
>>> 10 == 11
False
>>> 11 == 10
False
>>> 10 != 10
False
>>> 10 != 11
True
>>> 'Hola' == 'Hola'
True
>>> 'Hola' == 'Chau'
False
>>> 'Hola' == 'HOLA'
False
>>> 'Chau' != 'Hola'
True
 
Notar la diferencia que hay entre el operador de asignación (=) y el operador de comparación (==). El signo de igual (=) se utiliza para darle valor a una variable y el signo (==) se utiliza en las expresiones para ver si dos valores son iguales. Al principio podemos equivocarnos con facilidad, pero una ves que tengamos practica sera fácil distinguirlos. 
 
Bucle While
La declaración while marca el inicio de un bucle. Muchas veces necesitamos que nuestros programas hagan algo una y otra ves. 
Si la condición se evalúa como Verdadera (True), se ejecuta todo lo que esta identado dentro del ciclo While, si no, se corta el ciclo y sale fuera del while. 
En nuestro caso: while intentos < 6: Se traduce: mientras intentos (que en un principio tiene valor 0, sea menor que 6, hacer esto:
 
    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
 
 
Así es como funciona el ciclo While, siempre y cuando la condición sea verdadera, el programa mantiene la ejecución del código dentro del bloque hasta que la condición sea falsa. En nuestro caso, cuando intentos llegue a 6 se rompe el ciclo while porque intentos deja de ser menor a 6.
Nosotros podemos cambiar la dificultad del juego cambiando esta linea, por ejemplo: while intentos < 4 , y ahora el jugador tiene solo 4 intentos. 
 
Los intentos del jugador
 
 
    intentos = intentos + 1
    print ("Elige un numero del 1 al 20")
    numero = raw_input()
    numero = int (numero)
 
Para comenzar quiero decir que este código lo hice cuando recién estaba aprendiendo, y fue una traducción de un ejercicio en Ingles hecho en la versión 3.3. Ahora con un poquito mas de conocimiento puedo decir que las ultimas 3 lineas de este código se pueden resumir en 1:
numero = input ("Elige un numero del 1 al 20") 
Pero ya que en la entrada anterior publique el ejercicio de esta manera, sigamos así.
Una vez dentro del ciclo while lo primero que hacemos es sumarle 1 a intentos. O sea que el jugador entra en el intento 1. También se puede escribir esa linea de la siguiente manera: intentos += 1 . Como la variable intentos es inicializada en 0 la cuenta queda así: intentos = 0 + 1, por lo tanto la próxima ves que entremos en el ciclo while, intentos ya va a valer 1, y así sucesivamente hasta llegar a 6. 
 
Ahora lo que nos sale en pantalla es lo siguiente: Elige un numero del 1 al 20, nosotros o el jugador elige su respuesta que va a ser guardada en la variable numero con la función numero = raw_input().
 
Ayudando al jugador 
Con este codigo:
 
    if numero < x:
        print ("Tu numero es mas bajo")
    if numero > x:
        print ("Tu numero es mas alto")
    if x == numero:        
 
        break
 
Lo que hacemos es ayudar al jugador usando el condicional if. Si el numero que el eligió es mas chico que el numero aleatorio "x", se cumple la condición del primer if, por lo tanto le va a salir en pantalla: "Tu numero es mas bajo". Si no se cumple esta condición y el numero elegido es mayor que "x", se cumple la condición del segundo if y por lo tanto va a salir en pantalla: "Tu numero es mas alto".
Siempre tenemos que tener en cuenta que a partir de la sangría es lo que va a hacer si la condición se cumple. 
 
Terminando el ciclo con la sentencia break
 
    if numero == x:
        break
 
Que pasa si el jugador adivina el numero? Lo mas logico seria que gane, por lo tanto si se cumple que numero == x, la sentencia break hace que se termine el ciclo y salga del while. Si numero no es igual a x vuelve a comenzar el ciclo desde el principio, pidiéndole al jugador que elija un numero y así sucesivamente hasta que el jugador adivine o los intentos sean 6.
Recordar que si el jugador no adivina, intentos seguirá incrementando hasta llegar a 6. O puede ser que el jugador adivine y el ciclo while se rompa con un break, ahí es donde entra el código siguiente: 
 
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")
 
Después de salir del ciclo while, ya sea porque el jugador adivino o el numero de intentos fue 6, entran estas dos condicionales. La primera evalúa si después de salir del ciclo while numero == x, si esta condición es verdadera hace lo que viene después del if, si no, pasa al segundo if que evalúa si numero != x (si numero es distinto de x), si esto se cumple, se ejecuta lo que esta dentro de este if.