Paga en 4 cuotas sin intereses de $52.25

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

17d

01h

24m

48s

1

¿Cómo codificar "FÁCIL" el juego de JanKenPon con Python? + Tips de Bonus

Requisitos previos

  • Conocimientos básicos de python
  • Necesario: instalación de python en tu sistema o consola on-line para ejecutar el código (Replit.com)

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

  • Copia y pega todo el código del juego en tu consola.
  • Ejecuta el código para que entiendas de que se trata, y veas como funciona.
  • Comienza a leer el código en la consola siguiendo los comentarios, verás que es fácil de entender.
  • Regresa al tutorial y revisa las explicaciones de las partes del código.
  • Chequea los Tips.

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

  1. Para mejor visibilidad y que una linea de código no sea tan larga se puede usar la barra invertida “”
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):
  1. En una cadena podemos usar “\n” para hacer un salto de línea
print("Elige e ingresa un número: \n1. Piedra \n2. Papel \n3. Tijera")
  1. Para obtener un número aleatorio
    Se debe importar la biblioteca random puede ser en el comienzo del documento (apenas 1 vez)
  • randint(a,b) Devuelve un número entero aleatorio dentro del rango (a-b)
  • random() Devuelve un número de punto flotante aleatorio en el rango (0.0, 1.0)
  • choice(seq) Devuelve un elemento aleatorio de la secuencia seq.
  • shuffle(seq) Reordena aleatoriamente los elementos de la secuencia seq
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)
Escribe tu comentario
+ 2