¿Cómo implementar las tuplas en tu juego de piedra, papel o tijera?
¡Bienvenido a una emocionante lección sobre cómo mejorar tu juego de piedra, papel o tijera con los conceptos de Python! Imagina un juego donde las opciones son constantes y definitivas; ese es el poder de las tuplas. En este artículo, te guiaré paso a paso para integrar las tuplas en tu juego, asegurando que las opciones se mantengan inalterables. Además, aprenderás cómo hacer que la elección de la computadora sea aleatoria usando el módulo random de Python. ¡Acompáñame en esta aventura educativa!
¿Qué es una tupla y cómo se utiliza en el juego?
Una tupla en Python es una estructura de datos similar a una lista, pero con una diferencia crucial: las tuplas son inmutables. Esto significa que una vez creadas, no puedes modificar sus elementos. Son ideales cuando quieres almacenar valores constantes que no cambian a lo largo del programa. En el contexto de nuestro juego, las opciones "piedra", "papel" y "tijera" son perfectas candidatas para una tupla.
# Definiendo la tupla de opciones del juegooptions =('piedra','papel','tijera')
Esta tupla asegura que las opciones de juego no cambiarán, manteniendo la integridad del juego.
¿Cómo integrar aleatoriedad en la elección de la computadora?
Para simular una competencia justa, es esencial que la computadora pueda elegir entre "piedra", "papel" y "tijera" de manera aleatoria. Aquí es donde entra el módulo random de Python, que proporciona herramientas para generar valores aleatorios.
import random
# Elección aleatoria para la computadoracomputer_option = random.choice(options)
El método random.choice() selecciona aleatoriamente una opción de la tupla options, garantizando que la computadora no esté sesgada.
¿Cómo validar la opción del usuario?
Un problema común en programas interactivos es manejar las entradas no válidas del usuario. Queremos asegurarnos de que el usuario solo pueda elegir una de las opciones válidas de nuestra tupla. Si elige algo fuera de estas opciones, debemos informarle de manera adecuada.
# Verificación de la opción del usuariouser_option =input("Elige piedra, papel o tijera: ").lower()if user_option notin options:print("Esa opción no es válida. Por favor, elige de nuevo.")else:print(f"Tu opción: {user_option}, Opción del computador: {computer_option}")
Utilizando el operador in, podemos verificar si la opción del usuario está dentro de las opciones válidas, mejorando así la experiencia del usuario al proporcionar retroalimentación inmediata.
Comentarios finales sobre la implementación
El juego de piedra, papel o tijera no solo es divertido, sino también una excelente manera de practicar conceptos fundamentales de Python. Con el uso de tuplas y la habilidad para integrar aleatoriedad, hemos mejorado significativamente la funcionalidad de nuestro juego. Al seguir expandiendo y puliendo el programa, te encontrarás cada vez más cómodo con Python.
¿Te animas a experimentar con otras estructuras de datos en Python? En la próxima lección abordaremos los diccionarios, otra poderosa herramienta en el repertorio de Python. ¡Sigue con entusiasmo!
options = ("piedra", "papel","tijera")
computer_option = random.choice(options)
user_option= 1
while user_option not in options:
user_option = input("piedra, papel o tijera: ").lower()
if user_option == computer_option:
print("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!")
elif user_option == "papel" :
if computer_option == "piedra":
print("papel gana a piedra")
print("user gano!")
else:
print("tijera gana a papel")
print("computer gano!")
else: # user tiene tijera
if computer_option == "papel":
print("tijera gana a papel")
print("user gano!")
else:
print("piedra gana a tijera")
print("computer gano!")
¿Código espagueti?
¿En que momento pasaron el While?
No entendí el código.
Podemos hacer que el programa no se ejecuta en caso de que la opción ingresada no sea una de las tres. la función exit() hace que el código no se sigua ejecutando.
import random
option =('piedra','papel','tijera')user =input('¿piedra, papel o tijera? ')if not user inoption:print('Por favor, elige una opción válida...')exit()# más código 👇
Buena idea.
Justo lo que buscaba, bien ahi!
Aporte de piedra papel tijera con cosas extra.
import time
import sys
import os
import random
# Funcion para validar si son numeros lo que se ingresa.defvalidar_numero(text, text2):whileTrue:try:delay_print(text) valor =int(input("\n=> ")) except ValueError:delay_print(f"Invalid option\nPlease only enter numbers{text2}\n") time.sleep(1.5) os.system("cls")title()continuereturn valor
# Funcion para escribir letra por letra
def delay_print(s):for c ins: sys.stdout.write(c) sys.stdout.flush() time.sleep(0.02) # Tiempo de espera estre cada letra
def resultado_del_juego(resultado): time.sleep(0.5) os.system("cls")title()delay_print( f"You chose {options[user_option]} Computer chose {options[computer_option]}\n{resultado}\n") time.sleep(2)def repetir(text):whileTrue: repetir =validar_numero(f"Play again?\n1-Yes 2-No", text)if repetir ==2: global ciclo
delay_print("Thanks for playing, see you next time!") ciclo =0return ciclo
elif repetir ==1:return os.system("cls")else:delay_print(f"Invalid option\nPlease only enter numbers{text}\n") time.sleep(1.5) os.system("cls")title()def title():print("______ _ ______ _____ _ ")print("| ___ \ | | | ___ \ / ___| (_) ")print("| |_/ /___ ___| | __ | |_/ /_ _ _ __ _ __ ___ _ __ \ `--. ___ _ ___ ___ ___ _ __ ___ ")print("| // _ \ / __| |/ / | __/ _` | '_ \| '_ \ / _ \ '__| `--. \/ __| / __/ __|/ _ \| '__/ __| ")print("| |\ \ (_) | (__| < | | | (_| | |_) | |_) | __/ | /\__/ / (__| \__ \__ \ (_) | | \__ \ ")print("\_| \_\___/ \___|_|\_\ \_| \__,_| .__/| .__/ \___|_| \____/ \___|_|___/___/\___/|_| |___/ ")print(" | | | | Score ")print( f" |_| |_| you {score[0]} Computer {score[1]} ")score =[0,0]options =("","Rock \U0001f44a","Paper \u270B","Scissor\u2702\ufe0f ")# 0123ciclo =1while ciclo ==1: os.system("cls")title() user_option =validar_numero("Enter a choice\n1 Rock\U0001f44a\n2 Paper\u270B\n3 Scissor\u2702\ufe0f \n4 Exit."," between 1 and 4.")if user_option not in(1,2,3,4):delay_print("Invalid option\nPlease only enter numbers between 1 and 4\n") time.sleep(1.5)if user_option ==4: time.sleep(0.5) ciclo =0delay_print("Thanks for playing, see you next time!") computer_option = random.randint(1,3)if user_option == computer_option:resultado_del_juego("It's a tie!")repetir(" between 1 and 2.") elif user_option ==1 and computer_option ==2 or user_option ==2 and computer_option ==3 or user_option ==3 and computer_option ==1:resultado_del_juego("You lose") score[1]+=1repetir(" between 1 and 2.") elif user_option ==1 and computer_option ==3 or user_option ==2 and computer_option ==1 or user_option ==3 and computer_option ==2:resultado_del_juego("You win!") score[0]+=1repetir(" between 1 and 2.")
nombre te pasaste, te quedo bien pro
El juego siempre toma "rock"
¿cual es la fuente que tienes en tu VSC?
@danielpzu La fuente es: Dank Mono
import random
options = ('piedra', 'papel', 'tijera')
user = input('piedra, papel o tijera = ')
user = user.lower()
pc = random.choice(options)
print('User = ', user)
print('Pc = ', pc)
if pc == user:
print('Empate')
elif (user == 'tijera'and pc == 'piedra') or (user == 'papel' and pc == 'tijera') or (user == 'piedra' and pc == 'papel'):
print('Has perdido')
else:
print('Has ganado')
muy bien
Para que después de decirle que esa no es una opción válida, el usuario tenga la oportunidad de colocar otra opción, he añadido dos líneas de código, sin modificar las otras líneas:
if not user_option inoptions:print("Esa opción no es válida") user_option =input("Coloca nuevamente una opción => ") user_option =(user_option.lower())
Aquí ocurre el problema si el usuario digita nuevamente una opción no válida.
Excelente forma de incorporar las tuplas!
Hola!
Les comparto mi propuesta de solución, en mi caso coloqué la validación para las opción del user, en caso que esta no sea válida, genera el mensaje y se detiene la ejecución del programa.
# Proyecto: condicionales
import random
# Creamos una tupla de opciones
options =("piedra","papel","tijera")user_option =input("Piedra, Papel o Tijera => ")# Convertimos a minúscula el texto ingresado por el usuario
user_option = user_option.lower()#print(user_option)if user_option not inoptions:print(f"La opcion {user_option} no es válida")else: # Seleccionamos la opción de manera aleatoria
computer_option = random.choice(options)print("computer => ", computer_option)if user_option == computer_option:print("Empate!") elif user_option =="piedra":if computer_option =="tijera":print(f"{user_option} gana a {computer_option}. User ganó!")else:print(f"{computer_option} gana a {user_option}. Computer ganó!") elif user_option =="papel":if computer_option =="piedra":print(f"{user_option} gana a {computer_option}. User ganó!")else:print(f"{computer_option} gana a {user_option}. Computer ganó!") elif user_option =="tijera":if computer_option =="papel":print(f"{user_option} gana a {computer_option}. User ganó!")else:print(f"{computer_option} gana a {user_option}. Computer ganó!")
Esta mejor esta opcion, pues si el usuario introduce una opcion que no es valida, solo aparece el msj : no es valido
mientras que si introduce una opcion que esta dentro de la tupla sigue la secuencia del juego. Buenisimo, Muchas Gracias.
import random
user_option =input("piedra, papel o tijera: ")options =("piedra","papel","tijera")computer_option = random.choice(options)print("el computador eligio: {}".format(computer_option))if user_option == computer_option:print("empate")elif user_option =="piedra":if computer_option =="tijera":print("ganaste")else:print("perdiste")elif user_option =="papel":if computer_option =="tijera":print("perdiste")else:print("ganaste")elif user_option =="tijera":if computer_option =="papel":print("ganaste")else:print("perdiste")else:print("opción incorrecta")
super
¿Cómo le hacen para publicar sus códigos de programación?
El cuadro de comentario cuenta con la opción de "insertar código".
Hola Juan Fernando, espero que estés muy bien.
En un comentario o al momento de crear un nuevo comentario, encontrarás un símbolo con </>, esto te creará 3 comillas francesas (`) para dar inicio al código y otras 3 para indicar que es el cierre del código:
print("Ya sabes como publicar código en platzi!")
import random
""" Piedra, Papel o Tijera """you =input("piedra, papel o tijera => ").lower()options =("piedra","papel","tijera")pc = random.choice(options)if you == pc:print(f"You chose: {you}, PC chose: {pc} => Empate")elif you =="piedra":if pc =="tijera":print(f"You chose: {you}, PC chose: {pc} => Ganaste")else:print(f"You chose: {you}, PC chose: {pc} => Perdiste")elif you =="papel":if pc =="piedra":print(f"You chose: {you}, PC chose: {pc} => Ganaste")else:print(f"You chose: {you}, PC chose: {pc} => Perdiste")elif you =="tijera":if pc =="papel":print(f"You chose: {you}, PC chose: {pc} => Ganaste")else:print(f"You chose: {you}, PC chose: {pc} => Perdiste")else:print(f'"{you}" No es una opcion valida')
esta clase es oro
Rock,Paper,Scisors(version en ingles)import random
options =('rock','paper','scisors')user_option =input('rock, paper or scisors => ')user_option = user_option.lower()if not user_option inoptions:print('that option is not valid')computer_option = random.choice(options)print('User option =>', user_option)print('Computer option =>', computer_option)if user_option == computer_option:print('Is a tie!')elif user_option =='rock':if computer_option =='scisors':print('rock beats scisors')print('user wins!')else:print('paper beats rock')print('computer wins!')elif user_option =='paper':if computer_option =='rock':print('paper beats rock')print('user win')else:print('scisors beats paper')print('computer wins!')elif user_option =='scisors':if computer_option =='paper':print('scisors beats paper')print('user wins!')else:print('rock beats scisors')print('computer wins')
obsservacion, te falto poner una opcion que diga quien gano, asi como al momento de correr el codigo tienes dar enter primero para que corra codigo
# Apunte de Clase: Proyecto de Tuplas en Python para Videojuego de Piedra, Papel o Tijera
## Introducción 🚀
En este apunte exploraremos cómo implementar un videojuego de Piedra, Papel o Tijera en Python, utilizando las tuplas para almacenar las opciones del juego y seleccionar aleatoriamente la elección de la computadora. Las tuplas, gracias a su inmutabilidad, son una excelente elección para este tipo de datos que no cambiarán a lo largo de la ejecución del programa.
## Conceptos Clave 🗝️
### Tuplas en Python
Una tupla es una colección de Python que es ordenada e inmutable. Se utiliza para almacenar múltiples items en una sola variable. Las tuplas son escritas con paréntesis () y los elementos dentro de ellas pueden ser de cualquier tipo.
### Módulo random
Para seleccionar un elemento aleatoriamente de nuestra tupla, utilizaremos el módulo random de Python, específicamente la función choice() que elige un elemento al azar de una secuencia.
## Implementación Paso a Paso 🛠️
### Paso 1: Definir las Opciones del Juego
Primero, definiremos las opciones disponibles en el juego como una tupla:
opciones =("piedra","papel","tijera")
### Paso 2: Elección Aleatoria por la Computadora
Utilizaremos el módulo random para que la computadora elija su jugada:
import random
eleccion\_pc = random.choice(opciones)
### Paso 3: Entrada del Usuario
Pediremos al usuario que ingrese su elección, asegurándonos de que sea válida:
eleccion\_usuario =input("Elige: piedra, papel o tijera: ").lower()if eleccion\_usuario notin opciones:  print("Elección no válida, intente de nuevo.")
### Paso 4: Lógica del Juego
Implementaremos la lógica para determinar el ganador:
if eleccion\_usuario == eleccion\_pc:  print(f"Empate, ambos eligieron {eleccion\_usuario} 😲")elif(eleccion\_usuario =="piedra"and eleccion\_pc =="tijera")or \\
  (eleccion\_usuario == "papel" and eleccion\_pc == "piedra") or \\  (eleccion\_usuario == "tijera" and eleccion\_pc == "papel"):  print(f"Ganaste 🏆, {eleccion\_usuario} gana a {eleccion\_pc}!")else:  print(f"Perdiste 😢, {eleccion\_pc} gana a {eleccion\_usuario}.")
### Paso 5: Ejecución Dinámica
Para hacer el juego más dinámico, podemos poner todo el proceso dentro de un bucle while para que el usuario pueda jugar múltiples veces sin tener que reiniciar el programa:
seguir\_jugando ="si"while seguir\_jugando.lower()=="si":  \# Insertar aquí los pasos 2, 3 y 4  seguir\_jugando = input("¿Quieres seguir jugando? (si/no): ")
## Ejemplos Prácticos Complejos 🎲
Para llevar nuestro juego al siguiente nivel, podríamos introducir una puntuación, donde el usuario y la computadora acumulen puntos a lo largo de varias rondas, y al final, se declare un ganador basado en quién tenga más puntos. Esto requeriría variables adicionales para llevar la cuenta de los puntos y lógica adicional para determinar el final del juego y el ganador.
## Conclusión 🏁
Este proyecto demuestra cómo se pueden utilizar las tuplas en Python para almacenar datos inmutables, como las opciones en un juego de Piedra, Papel o Tijera. Mediante el uso del módulo random, podemos añadir un elemento de incertidumbre al permitir que la computadora elija su jugada de manera aleatoria, haciendo el juego impredecible y emocionante. La implementación de una lógica de juego básica y la posibilidad de extensión a un sistema de puntuación demuestran la flexibilidad de Python como herramienta de programación. ¡Espero que este apunte te inspire a crear tu propia versión del juego y a explorar más sobre la programación en Python! 🐍🎮
Una manera de que el programa no continúe hasta introducir la opción correcta:
whileTrue:if not user_option inoptions:print('esa opcion no es valida') user_option =input('Elije nuevamente: piedra, papel o tijera => ').lower()else:break
Me encanta este primer video juego con Python; es aparentemente mas sencillo que otros lenguajes.
#proyecto - juego de piedra, papel o tijera
import random #permite enviar de forma aleatoria una tupla o lista de opciones
options =('piedra','papel','tijera')user_option =input('piedra, papel o tijera => ')user_option = user_option.lower()if not user_option inoptions:print('Esa opción no es valida')computer_option = random.choice(options)#escoger algo basado en tupla o lista
print('User option =>', user_option)print('Computer option =>', computer_option)if user_option == computer_option:print('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!')elif user_option =='papel':if computer_option =='piedra':print('papel gana a piedra')print('user gano!')else:print('tijera gana a papel')print('computer gano!')elif user_option =='tijera':if computer_option =='papel':print('tijera gana a papel')print('user gano!')else:print('piedra gana a tijera')print('computer gano!')
Esta interesante el proyecto.
#proyecto piedra papel o tijera
import random
contador = 0
punto_bot = 0
punto_user = 0
bot = ['piedra', 'papel', 'tijera']
while (contador <= 2):
num = random.randint(0, 2)
print(bot[num])
User_input = input("ingrese piedra papel o tijera: ")
if (bot[num] == User_input):
print(User_input, bot[num], "empate")
elif ((bot[num] == 'papel' and User_input == 'piedra')
or (bot[num] == 'piedra' and User_input == 'tijera')
or (bot[num] == 'tijera' and User_input == 'papel')):
punto_bot += 1
print(User_input, bot[num],"PERDISTE usuario")
elif ((bot[num] == 'piedra' and User_input == 'papel')
or (bot[num] == 'tijera' and User_input == 'piedra')
or (bot[num] == 'papel' and User_input == 'tijera')):
punto_user += 1