Requisitos previos
Descripción
Todos conocemos el famoso juego de piedra, papel y tijera… bueno yo lo conozco por JanKenPon
El juego funciona así:
JanKenPon te da la bienvenida y te pregunta cuantas veces quieres jugar, te dice que el máximo por partida es de 3 juegos, ingresas la cantidad de juegos que quieres hacer, el programa verifica si el valor es válido (si no es válido te muestra un mensaje), luego el programa asigna al sistema de forma aleatoria un número del 1 al 3 para cada objeto, luego te muestra la numeración (1. Piedra, 2. Papel, 3. Tijera) y te pregunta cuál es tu número, respondes, verifica tu respuesta, si respondiste un número válido, compara tu número-usuario con el número-sistema, te responde con el número de intentos, te dice quien ganó y te muestra una carita tipo 😃 dependiendo si ganaste o no.
obs: Si al comienzo cuando el programa pregunta cuántos juegos quiere hacer si respondes con el valor 0 se encierra la partida y te dice Adiós!
Recomendación
Código completo
# JanKenPon --> jkp
print("Bienvenido, este es el juego del JANKENPON")
juegos = 0
print("Dime cuantas veces quieres jugar? el máximo es 3 veces")
# Caso de error. El usuario ingresó una letra o un string cualquieraintentos_valido = False
while not intentos_valido:
juegos = input("Ingresa el número de juegos: ")
try:
juegos = int(juegos)
ifjuegos == 0:
print("===========================")
print("No quieres jugar? 8-(")
print("Adiós, que te vaya bien! 8-)")
break # Salir del bucle y finalizar el programa
elif juegos > 3:
print("===========================")
print("El número de juegos debe ser menor o igual a 3. Intenta de nuevo. ;-)")
print("===========================")
else:
intentos_valido = True # Cambiar a True para salir del bucle
except ValueError:
print("===========================")
print("Debes ingresar un número entero. Intenta de nuevo. :-o")
print("===========================")
# Ahora que hemos validado los juegos, podemos ejecutar las partidas
for _ in range(juegos): # Ejecutar el juego tantas veces como juegos indicados
print(f"\nIntento {_ + 1}:")
# Número aleatoreo para la elección de la máquina # Obtener un número aleatorio para representar las opciones de piedra, papel o tijeraimport random
sys_jkp = random.randint(1, 3)
print("Elige e ingresa un número: \n1. Piedra \n2. Papel \n3. Tijera")
# Elección número recibido del usuariouser_jkp = input("Cuál es tu número:")
# Convertir a número para evitar el uso de comillasuser_jkp = int(user_jkp)
# Mensaje de error si el usuario ingresa un número fuera de rangoerror = "No se puede jugar"# Declaramos la variable comentariocomentario = "Debes ingresar el número de tu objeto entre 1, 2 o 3"# Caso de empatesif (user_jkp == 1andsys_jkp == 1) \
or (user_jkp == 2andsys_jkp == 2) \
or (user_jkp == 3andsys_jkp == 3):
# Verificación de qué objeto escogió el usuarioifuser_jkp == 1:
comentario = "Ambos tenemos piedra"
elif user_jkp == 2:
comentario = "Ambos tenemos papel"else:
comentario = "Ambos tenemos tijera"
print("----------------------------")
print("Empatamos :-|\n" + comentario)
print("----------------------------")
# Si el valor recibido entra en alguna condicional sabremos que el valor es válido# Si el valor recibido entra en la condicional else, es porque el valor no es válido# Caso de victorias
elif (user_jkp == 1andsys_jkp == 3) \
or (user_jkp == 2andsys_jkp == 1) \
or (user_jkp == 3andsys_jkp == 2):
# Verificación de qué objeto escogió el usuarioifuser_jkp == 1:
comentario = "Tienes piedra, tengo tijera"
elif user_jkp == 2:
comentario = "Tienes papel, tengo piedra"else:
comentario = "Tienes tijera, tengo papel"
print("----------------------------")
print("Ganaste :-)\n" + comentario)
print("----------------------------")
# Caso de derrotas
elif (user_jkp == 1andsys_jkp == 2) \
or (user_jkp == 2andsys_jkp == 3) \
or (user_jkp == 3andsys_jkp == 1):
# Verificación de qué objeto escogió el usuarioifuser_jkp == 1:
comentario = "Tienes piedra, tengo papel"
elif user_jkp == 2:
comentario = "Tienes papel, tengo tijera"else:
comentario = "Tienes tijera, tengo piedra"
print("----------------------------")
print("Perdiste :(\n" + comentario)
print("----------------------------")
# Caso de error. El usuario ingresó un número fuera de rangoelse:
print("----------------------------")
print(error + " :-O\n" + comentario)
print("Perdiste :(")
print("----------------------------")
Explicaciones del código
Creamos un bucle while para solicitar y verificar la entrada del usuario.
Este bucle se ejecutará continuamente hasta que el usuario ingrese el valor “0” para salir o un valor válido entre 1 y 3 para jugar.
El usuario ingresa el número de juegos, y este valor se guarda en la variable “juegos”.
intentos_valido = Falsewhilenot intentos_valido:
Cómo entender este while?
Recuerda esto: Siempre que while sea verdadero se ejecutará el bucle.
Hemos declarado intentos_valido = False
En while estamos negando False; es como si estuviera escrito while True por tanto se ejecuta el bucle.
Y cómo es que consigue salir del bucle infinito? cuando el usuario ingresa “0” declaramos un break y acaba el juego o cuando el usuario ingresa un valor válido entre 1 y 3
En este último caso, el usuario quiere jugar, entonces declaramos intentos_valido = True
veamos que sucede ahora; si intentos_valido es True tenemos; que cuando entra nuevamente al bucle se encuentra con lo siguiente:
Ahora en while estamos negando True; es como si estuviera escrito while False por tanto se salta el bucle y ahora comienza a ejecutar el siguiente bloque for
for_inrange(juegos): # Ejecutar el juego tantas veces como juegos indicados
print(f"\nIntento {_ + 1}:")
Y qué es esto?
Estamos iterando la cantidad de juegos que el usuario solicitó, así de fácil.
el “_” antes de in range(juegos) quiere decir que no usaremos una variables y que se va a ejecutar el for el número de veces indicado por “juegos”
Sobre la lógica de la comparación y los resultados
Utilizamos las condicionales para definir el empate, victoria y derrota.
Para el empate es muy simple, si el número-usuario es igual al numero-sistema es un empate siempre.
Para las victorias, aplicamos las reglas del juego que todos sabemos; piedra le gana a tijera entonces 1 le gana a 3, papel le gana a piedra entonces 2 le gana a 1 y tijera le gana a papel entonces 3 le gana a 2. De esta forma sabemos que cada vez que tenemos estos pares de números el usuario a ganado.
Para las derrotas aplicamos la misma lógica la piedra pierde con el papel (1 y 2), el papel pierde con la tijera (2 y 3) y la tijera pierde con la piedra (3 y 1).
Finalmente si ninguna condicional es verdadera el usuario a introducido un valor fuera del rango.
Tips
if (user_jkp == 1andsys_jkp == 1) or (user_jkp == 2andsys_jkp == 2) or (user_jkp == 3andsys_jkp == 3):
if (user_jkp == 1andsys_jkp == 1) \
or (user_jkp == 2andsys_jkp == 2) \
or (user_jkp == 3andsys_jkp == 3):
print("Elige e ingresa un número: \n1. Piedra \n2. Papel \n3. Tijera")
import random
numero_aleatorio = random.randint(1, 100) # Genera un número aleatorio entre 1 y 100# Genera un número aleatorio entre 0.0 y 1.0 (no incluido)
numero_aleatorio = random.random()
lista = ['manzana', 'banana', 'cereza']
# Devuelve uno de los elementos de la lista de forma aleatoria
elemento_aleatorio = random.choice(lista)
lista = [1, 2, 3, 4, 5]
# Reordena aleatoriamente los elementos de la listarandom.shuffle(lista)