¿Cómo implementar condicionales en un juego de piedra, papel o tijera?
En este apasionante proyecto, desarrollaremos el clásico juego de piedra, papel o tijera, creando un programa que nos permita jugar contra la computadora. Aplicaremos condicionales para decidir el resultado del juego según la elección tanto del usuario como de la máquina. Lo intrigante de este juego es cómo se pueden emplear las estructuras de control para definir el ganador, incrementando la complejidad a medida que avanzamos en su desarrollo.
¿Cómo manejar números pares e impares con Python?
Antes de entrar a la programación del juego, se revisa un ejercicio anterior que consistía en determinar si un número es par o impar utilizando el operador de módulo (%). Un número es par si su residuo al dividirlo por dos es cero. Esta sencilla técnica nos ayuda a familiarizarnos con las condicionales:
number =int(input("Introduce un número: "))if number %2==0:print("El número es par")else:print("El número es impar")
¿Cómo inicializar el juego de piedra, papel o tijera?
Construimos la estructura básica del juego solicitando la elección del usuario y estableciendo temporalmente una opción fija para la computadora. Esto nos permite probar la lógica antes de implementar la elección aleatoria de la máquina en futuros pasos.
user_option =input("Elige piedra, papel o tijera: ").lower()computer_option ="piedra"# Temporalmente fijo para pruebas
¿Cómo implementar las condicionales del juego?
Aquí es donde las condicionales cobran vida. Usamos if, elif y else para evaluar las diferentes combinaciones posibles entre la elección del usuario y la de la computadora. Esto determina el ganador según las reglas del juego:
if user_option == computer_option:print("Es un empate")elif user_option =="piedra":if computer_option =="tijera":print("Piedra gana a tijera. ¡Usuario gana!")else:print("Papel gana a piedra. ¡Computadora gana!")elif user_option =="papel":if computer_option =="piedra":print("Papel gana a piedra. ¡Usuario gana!")else:print("Tijera gana a papel. ¡Computadora gana!")elif user_option =="tijera":if computer_option =="papel":print("Tijera gana a papel. ¡Usuario gana!")else:print("Piedra gana a tijera. ¡Computadora gana!")
¿Cómo evaluar errores y mejorar el código?
Al ejecutar y probar el programa, es fundamental revisar los mensajes impresos y las condiciones para asegurarse de que cada opción del juego tenga asociado el mensaje adecuado. Además, consideremos la igualdad de caracteres usando métodos como .lower() para evitar discrepancias causadas por mayúsculas:
user_option =input("Elige piedra, papel o tijera: ").lower()
¿Qué sigue?
¡Felicidades! Has implementado con éxito las condicionales fundamentales para el famoso juego de piedra, papel o tijera. Pero estamos sólo comenzando. A medida que continúas en este curso, mejoraremos y complejizaremos más el juego. Próximamente, nos enfocaremos en trabajar con cadenas de texto (strings) para enriquecer nuestras habilidades de programación. ¡Mantén el entusiasmo y sigue adelante!
Si utilizan el metodo lower() va a transformar todo el texto en minusculas por si el usuario escribe con mayusculas alguna letra
user_option = user_option.lower()
Muchas gracias por este aporte, con esto me ahorro poner un OR por cada posibilidad de escribir una opción con mayúsculas
O tambien Utilizar el upper() cualquiera de las dos validas, en este caso transforma todo el texto en Mayuscula:
user_option = user_option.upper()
Mi solución con operadores lógicos 'and' y 'or' para hacer menos líneas de código:
Está muy buena esta solución, no se me hubiera ocurrido!
para optimizarlo aun más, el sistema siempre elije papel, lo unico que hay que evaluar es la respuesta del usuario
<userUno =input('Choose Piedra Papel o Tijera. Only One option ')userDos =input('Choose Piedra Papel o tijera. Only one option, para el otro jugador ')# // piedra gana a tijera# // tijera gana a papel# // papel gana a piedraif userUno == userDos:print('empate')elif userUno =='piedra' and userDos =='tijera':print('Gana UserUno')elif userUno =='tijera' and userDos =='papel':print('UserUno gana')elif userUno =='papel' and userDos =='piedra':print('UserUno gana')else:print('User2 Gana')>
me gusto tu solución, se nota que sabes bastante de lógica o de tablas de verdad.
De que manera puedo mostrar mis aportes en ese formato?
los avanzados deberian no usar aportes tan avanzados ya que confunden a ciertas personas que esperan un buen y entendible ademas de basico aporte para poder entender algo, se les agradece la intencion de mostrar que saben mucho
Es cierto, no le ponen 'lógica' al asunto.
No entedí nada y no me parece que haya usuarios que ponen soluciones más avanzadas a este nivel. Qué bueno que sepan, pero bajénle a su ego. No confundan a los que vamos apenas aprendiendo.
Estoy muy de acuerdo. Yo no le entiendo a Nicolas y menos cuando dice palabras en ingles.
dónde está mi antiguo profe, este no me gusta se enreda mucho y lo enreda a uno
Hizo su propia plataforma Kasel jajaj
jajaja este capitulo solo fue pesimo pero los demas viene muy bien, igual el otro era muy bueno sin desmeritar a Nicolas.
Este seria el codigo para el juego de piedra papel o tijera
def main():# Iniciamos dando una explicacion breve del programa
print('JUGUEMOS: PIEDRA, PAPEL O TIJERA!')print(' ')print('*'*60)print(' ')print('INSTRUCCIONES')print(' ')print('El juego consiste en la participacion de 2 jugadores')print('Cada jugador elije una de las opciones')print('Las combinaciones ganadoras son las siguientes: ')print('- Piedra gana a tijera')print('- Tijera gana a papel')print('- Papel gana a piedra')print(' ')print('*'*60)print(' ')print('Elije una de las opciones teniendo en cuenta que:')print('1 - Piedra')print('2 - Tijera')print('3 - Papel')print(' ')print('*'*60)print(' ')print('ELECCION')print(' ') # Solicitamos los valores de los 2 jugadores
gamer1 =input('Eleccion del jugador 1: ') gamer1 =int(gamer1)if gamer1 ==1:print('Piedra') elif gamer1 ==2:print('Tijera') elif gamer1 ==3:print('Papel')else:print('Eleccion no valida') gamer2 =input('Eleccion del jugador 2: ') gamer2 =int(gamer2)if gamer2 ==1:print('Piedra') elif gamer2 ==2:print('Tijera') elif gamer2 ==3:print('Papel')else:print('Eleccion no valida') #Realizamos el proceso logico para determinar quien es el ganador
print(' ')print('*'*60)print(' ')print('RESULTADO')print(' ')if gamer1 ==1 and gamer2 ==2:print('El ganador es el jugador 1')print(' ')print('FELICITACIONES') elif gamer1 ==1 and gamer2 ==3:print('El ganador es el jugador 2')print(' ')print('FELICITACIONES') elif gamer1 ==2 and gamer2 ==3:print('El ganador es el jugador 1')print(' ')print('FELICITACIONES') elif gamer1 ==2 and gamer2 ==1:print('El ganador es el jugador 2')print(' ')print('FELICITACIONES') elif gamer1 ==3 and gamer2 ==1:print('El ganador es el jugador 1')print(' ')print('FELICITACIONES') elif gamer1 ==3 and gamer2 ==2:print('El ganador es el jugador 2')print(' ')print('FELICITACIONES') elif gamer1 == gamer2:print('Es un empate')print(' ')print('FELICITACIONES')else:print('Elecciones no validas vuelva a intentarlo')if(__name__ =='__main__'):main()
Asi se veria en consola este codigo
Me gusta pero es muy largo para algo tan sencillo 😂
Puedes colocar un print de varias líneas colocando triple comillas, así:
print('''JUGUEMOS:PIEDRA,PAPELOTIJERA!INSTRUCCIONESEl juego consiste en la participacion de 2 jugadores
Cada jugador elije una de las opciones
Las combinaciones ganadoras son las siguientes:-Piedra gana a tijera
-Tijera gana a papel')-Papel gana a piedra')Elije una de las opciones teniendo en cuenta que:1-Piedra2-Tijera3-Papel''')
De esta manera no necesitas colocar tantos print :)
UN APORTE INTERESANTE...
Hola, ¿esta información la haz sacado de alguna página o tú lo escribiste?
Toda la documentación como la definición de la palabra clave elif la encuentras en esta pagina W3School
esta fue mi solución
"""
_______________________________________________
reglas del juego
_______________________________________________
piedra gana a tijeras
tijeras gana a papel
papel gana piedra
"""# eleccion de los jugadoresplayerOption =input('elige una de las siguientes opciones. piedra, papel o tijeras :')pcOption ='piedra'# condiciones del juego con las cuales el j1 ganacondicion1 = playerOption =='tijeras'and pcOption =='papel'condicion2 = playerOption =='papel'and pcOption =='piedra'condicion3 = playerOption =='piedra'and pcOption =='tijeras'# logica del juegoif condicion1 or condicion2 or condicion3:print('juego terminado, resultado: el jugador gana')else:if playerOption == pcOption:print('juego terminado, resultado: empate')else:print('juego terminado, resultado: el pc gana')
Te comparto mi solución
me gusto tu solución, porque al convertir piedra,papel o tijeras en números, te ahorras muchos problemas con que las personas escriban correctamente
Les comparto la manera en que lo desarrolle
import random
# Definiendo el diccionario
option ={'1':'Piedra','2':'Papel','3':'Tijera',}# Eleccion de los jugadores
user_option =input(''''PIEDRAPAPELOTIJERAA jugar!!!!Elige:1 para piedra
2 para papel
3 para tijera=>''')print('Elegiste', option[user_option])computer_option =str(random.randint(1,3))print('El computador elige', option[computer_option])# Condiciones en las que el jugador gana
escenario1 = user_option =='1' and computer_option =='3'escenario2 = user_option =='2' and computer_option =='1'escenario3 = user_option =='3' and computer_option =='2'# Resultado del juego
if user_option == computer_option:print('EMPATE!')else:if escenario1 or escenario2 or escenario3:print('GANASTE!')else:print('PERDISTE')
Me gustó tu solución. Usaste un diccionario, también definiste las opciones de usuario de una forma resumida. Lo que no entendí muy bien del diccionario es por qué no se le dio la opción al usuario de ingresar directamente con palabras y no un número.
Tu respuesta esta super pro!
import random
# Valores de opciones del Jankenpodict_options ={1:"Piedra",2:"Papel",3:"Tijera"}# Captura de valor random de la computadora
index_computer = random.randint(1,3)option_computer = dict_options[index_computer]# Set de opciones y captura de valor del usuario
str_option ="""
--------------**JANKENPO**--------------1:Piedra2:Papel3:Tijera--------------"""
print(str_option)index_user =int(input("Ingrese opción => "))print("-"*14)option_user = dict_options[index_user]# Evaluación de la jugada
if option_user == option_computer: message ="Empate!" emoji ="\U0001F611"elif(option_user =="Papel" and option_computer =="Piedra") or \
(option_user =="Piedra" and option_computer =="Tijera") or \
(option_user =="Tijera" and option_computer =="Papel"): message ="Ganaste!" emoji ="\U0001F600"else: message ="Perdiste!" emoji ="\U0001F97A"# Imprimir resultado
print("-"*14)print("** RESULTADO **")print("-"*14)print(message, emoji)print("Computadora =>", option_computer)print("Usuario =>", option_user)
Excelente, hasta un emoji incluiste! Pensé que con el diccionario que creaste se podía luego ingresar con palabras y luego internamente se hacía la conversión a número.
Este es mi Codigo, selecciona de manera aleatoria para la computadora la opción entre "piedra papel o tijera" con la libreria "random", la invoco con "random.choice" para que seleccione dentro de las opciones. También utilice el operador logico "and" para que se cumplieran las dos opciones dentro del "elif".
Mi propuesta del juego piedra papel tijera:
Divide y vencerás:
Otra manera:
numero = int(input("ingresa un numero =>"))
if numero == numero % 2:
print("bien es numero par")
elif numero != numero %2:
print("es un numero impar")
Holaaa, alguien me podría ayudar a saber por qué "elif" siempre me arroja error de sintaxis
Hola, en python tienes que tener especial cuidado con la indentación / espacios al comienzo de la línea, por ejemplo, el else de la línea 10 debería tener la misma indentación que el if de la línea 7 para que ambos queden dentro del elif de la línea 6. También aplica para el de la línea 17, el de la 24 está bien.
Te quedaría así la primer parte:
if user_option == computer_option:print("Es un empate")elif user_option =="Piedra":if computer_option =="Tijera":print("Piedra gana a tijera")print("USER GANO!!")else:print("Papel gana a piedra")print("COMPUTER GANO!!")
si no me equivoco, else siempre se utiliza de último, es decir
if xxx:
elif xxx
else xxx:
ya que else le da un cierre al if del inicio.
Es mi aporte, espero te funcione
1) Ejemplo de código para que la computadora también elija una opción aleatoriamente:
opciones = ['piedra', 'papel', 'tijera']
computadora = random.choice(opciones)
2) Ejemplo de código para que evitar diferencias entre mayúsculas y minúsculas al tipear la opción:
usuario = input("¿Piedra, papel o tijera? ").lower()
opcion=input("Elige tu opcion: ")computer_option="piedra"if opcion==computer_option:print("Empate")elif opcion=="piedra":if computer_option=="papel":print("Papel gana a piedra")print("Gano la computadora")else:print("Piedra gana a tijera")print("Gano el usuario")elif opcion=="papel":if computer_option=="piedra":print("Papel gana a piedra")print("Gano el usuario")else:print("Tijera gana a piedra")print("Gano la computadora")elif opcion=="tijera":if computer_option=="papel":print("Tijera gana a papel")print("Gano el usuario")else:print("Piedra gana a tijera")print("Gano la computadora")else:print("Escoge una opcion correcta")
con esta forma no me genera error
user_option=input("piedra, papel ó tijera =>")
computer_option="papel"
if user_option == computer_option:
print("¡empate!")
elif user_option== "piedra":
if computer_option=="tijera":
print("gana user, piedra gana a tijera")
else:
print("cumputer gana")
elif user_option== "tijera":
if computer_option=="papel":
print("gana user")
else:
print("gana computer")