5 nov 2016

Python 05. Cara o cruz


Python 05. Cara o cruz

Vamos a hacer un programa sencillo para elegir entre cara o cruz. Nos servirá para aprender cosas muy importantes para los juegos.

El código del programa:

Deberías escribirlo directamente en  file editor (no solo copiar y pegar). Recuerda no escribir los números de linea y copiar todo el resto tal como está.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#Este juego es para adivinar si ha salido cara o cruz

import random 

numero=random.randint(1,2)

if numero==1:
   lado='cara'
if numero==2:
   lado='cruz'

print ('¿Hola, como te llamas?')
nombre=input()

print (nombre+', ¿quieres cara o cruz?')
respuesta=input()

if respuesta==lado:
   print('¡Muy bien, '+nombre+', ha salido '+lado+', has acertado!')

if respuesta!=lado:
   print('¡Mala suerte, '+nombre+', ha salido '+lado+', has perdido!')
Cando lo tengas escrito, recuerda que debes guardar el archivo con extensión .py y para probalo pulsar F5 o hacer clic en Run- Run Module.

El resultado:

Si todo va bien, el resultado será algo como esto:

¿Hola, como te llamas?
Pedro
Pedro, ¿quieres cara o cruz?
cara
¡Muy bien, Pedro, ha salido cara, has acertado!
Por partes:

La primera linea es un comentario que indica lo que vamos a hacer

1. #Este juego es para adivinar si ha salido cara o cruz

La segunda linea (y otras más) las dejamos en blanco para separar un poco las distintas partes del programa y facilitar así su lectura.

La tercera linea es una sentencia import . Las sentencias no son funciones, son instrucciones que hacen algo pero que no nos dan ningún valor como resultado. Con import, lo que hacemos es traer un Módulo, que son programas que vienen con Python y tienen funciones adicionales. Para aligerar el programa no se incorporan por defecto, así que hay que traerlas con import. En realidad, lo que tienes que saber de momento es que, si quieres introducir azar en tu programa, deberás hacer un import random al principio del programa.

 3. import random

En la linea 5 creamos una variable numero, en la que almacenamos el resultado de una función perteneciente al módulo random, que es randint(x,y). Randint nos va a dar un integer, un número entero, que estará entre el valor de x u el valor de y. En este caso, solo podrán ser los valores 1 o 2.
Por ejemplo si queremos un entero  entre  1 y 10 deberiamos poñer random.randint(1,10), o si lo queremos entre  10 y 15 random.randint(10,15)

5. numero=random.randint(1,2)
En las lineas de la 7  a la10 empleamos la sentencia if para facer una comparación. Es decir, cogemos dos valores y comprobamos si se cumple una determinada condición que deseamos. Dependiendo de si se cumple o no, haremos que el programa haga una cosa u otra. En este caso:

7. if numero==1:
8.    lado='cara'
9. if numero==2:
10.    lado='cruz'
Aquí lo que hacemos es crear una variable lado y asignarle una cadena 'cara' ou una cadena 'cruz' dependiendo de si el número que ha salido es 1 o 2. Lo hacemos así porque es más fácil aplicar azar con randint a números que a cadenas. 
Tamvién es importante resaltar la sangria, que es el espacio que dejamos al principio de cada linea. Es muy importante respetarla, ya que, aparte de servir para leer y entender más fácilmente el programa, el file editor puede dar errores si no la aplicamos bien. De momento, recuerda que después de cada if la siguiente linea debe tener un espacio de tabulación.
Observa que ponemos dos signos =, ya que solo empreamos uno cuando queremos asignar una variable.

A continuación, las lineas 12 y 13 saludamos al jugador y le pedimos el nombre, para guardalo como nombre, como ya vimos antes.

12. print ('¿Hola, como te llamas?')
13. nombre=input()
Las lineas 15 y 16 preguntan al jugador si quiere cara o cruz, y almacenamos el resultado en la variable respuesta. El jugador tendrá que escribir exactamente 'cara' o 'cruz', si deja un espacio, confunde una letra, o incluso si pone una mayúscula, el programa le dirá que fallo. Más adelante aprenderemos mejores maneiras de hacer este programa para que no pasen esas cosas, pero de momento es mejor no complicárnos.

15. print (nombre+', ¿quieres cara o cruz?')
16. respuesta=input()

Las lineas de la 18 a la 22 vuelven a hacer una comparación, esta vez para ver si lo que ha escogido el jugador (respuesta) es igual que la variable lado que le asignamos al número que salió de la función randint. En el caso de que sea igual le daremos un mensaje de felicitación, en caso de que sea diferente (el signo != quere decir "no igual a") le daremos un aviso de que ha perdido. En los dos mensajes, incluímos la variable lado para que el jugador vea lo que sha salido

18. if respuesta==lado:
19.    print('¡Muy bien, '+nombre+', ha salido '+lado+', has acertado!')
20.
21. if respuesta!=lado:
22.    print('¡Mala suerte, '+nombre+', ha salido '+lado+', has perdido!')
Flujograma:



Ejercicios:

  1. Cambia los mensajes de bienvenida y de despedida.
  2. Modifica el programa para que haya una tercera opción "de canto".
  3. Haz un programa para adivinar la tirada de un dado. (Necesitas la sentencia variable=int(variable), que convierte un dato de tipo string en un dato de tipo integer  y/o la orden str(variable) que convierte un integer en una cadena (string)

2 comentarios:

Hola buenas, soy programador, simplemente buscaba algo sencillo para hacer y entretenerme y salir de la rutina de programar cosas muy complejas y me encontré con esto, solo con verlo me di cuenta de que hay un pequeño error, la teoría es que si tu por ejemplo escoges "cara" y sale ese mismo resultado debería darte un mensaje positivo de que ha tocado lo que tu has escogido, y si sale lo contrario en este caso "cruz" debería salir un mensaje negativo diciéndote que has perdido ya que ha salido lo contrario a lo que tu escogiste, bien pues, para no hacerme lio a mi mismo a la hora de explicarlo, voy a escoger el mismo ejemplo que he usado antes, en el caso de que el usuario escogiera por ejemplo "cara" y saliera "cara" la realidad es que no sale el mensaje de ganar sino el de perder, habiendo salido lo mismo, y si sale lo contrario obviamente si sale bien ya que aparece el de perder que es el que toca, ahí esta el error, en los condicionantes, he hecho este mismo ejercicio por mi cuenta, de una forma diferente, mucho mas sencilla y menos liosa, que además funciona correctamente y corrige ese problema, y es lo siguiente:

_Inicio del código_

from random import choice
from warnings import resetwarnings
Moneda=["Cara", "Cruz"]
print("¿Hola como te llamas?")
nombre=input()
print("¿Quieres Cara o Cruz?")
eleccion=input()
aleatorio = choice(Moneda)
print(aleatorio)
Resultado = aleatorio
if aleatorio=="Cara":
Resultado = "Cara"
if aleatorio=="Cruz":
Resultado="Cruz"
if eleccion==Resultado:
print("Felicidades, " + nombre + " Ha salido " + Resultado)
if eleccion!=Resultado:
print("Lo siento, " + nombre + " Ha salido " + Resultado)

_Fin del código_

Sentía la necesidad de resolver ese problema y compartir la solución y mi forma de hacerlo mas sencillo, como programador podría haberlo complicado mas y haberle añadido funciones, bucles etc... pero para lo que es el ejercicio en si que pretendías explicar, no quería complicarme demasiado para que fuera entendible para todo el mundo que este empezando en esto de programar.
Espero haber ayudado, no obstante, hiciste un buen trabajo, no iba nada mal encaminado el ejercicio, podría haber funcionado con algún cambio pequeñito, pero me parecía mas simple hacerlo de esta otra forma que se me ocurrió.
Un saludo :)

Hola buenas, he estado buscando algo fácil que programar para entretenerme, para salir de la rutina de programar cosas complejas y me he dado cuenta de un error que tienes en el ejercicio, soy programador y he visto el fallo nada mas verlo, para empezar lo hiciste con números y luego igualaste esos números con un condicional a cara y a cruz, lo cual aunque no es erróneo del todo, no es una forma muy adecuada de hacerlo, he visto que es una pagina de instituto, a si que entiendo que lo hiciste para explicarlo un poco mejor, el error de verdad viene cuando si escoges por ejemplo cara y sale cara, el mensaje que te salta es el que debería salir solo cuando salga lo contrario a lo escogido, es decir, que si o si escojas una u otra y salga lo mismo o lo contrario, siempre perderías, por eso digo que esta mal.
Se podría corregir sin ningún problema, aunque quizá sea mas lioso por la forma en la que esta hecho, a si que he decidido hacer el ejercicio de una forma sencilla, diferente, sin usar números, y donde el error de que salga siempre que has perdido este solventado, espero haber ayudado con este aporte, aquí dejo el código de mi solución o mi forma de hacerlo:

from random import choice
Moneda=["Cara", "Cruz"]
print("¿Hola como te llamas?")
nombre=input()
print("¿Quieres Cara o Cruz?")
eleccion=input()
aleatorio = choice(Moneda)
print(aleatorio)
Resultado = aleatorio
if aleatorio=="Cara":
Resultado = "Cara"
if aleatorio=="Cruz":
Resultado="Cruz"
if eleccion==Resultado:
print("Felicidades, " + nombre + " Ha salido " + Resultado)
if eleccion!=Resultado:
print("Lo siento, " + nombre + " Ha salido " + Resultado)

Twitter Facebook Tuenti LinkedIn gmail Favorites More