No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

0 Días
5 Hrs
21 Min
40 Seg

Refactor game

15/44
Recursos

¿Cómo refactorizar un juego utilizando funciones?

Has llegado al momento de poner a prueba tus conocimientos de Python y funciones a través de un proyecto práctico: la refactorización del clásico juego de "piedra, papel o tijera". Al eliminar el uso de variables globales y organizar mejor el código, logramos hacerlo más legible y mantenible. Ahora nos sumergiremos en cómo aplicar funciones para mejorar este juego y su estructura.

¿Cuál es el primer paso para aplicar funciones al juego?

El primer paso es identificar responsabilidades en el código. Por ejemplo, podemos crear una función cuya única responsabilidad sea elegir las opciones tanto del usuario como de la computadora. Esta función simplifica la lectura del código y asegura que cada parte del mismo solo se encargue de una tarea específica.

def choose_options():
    # Código que selecciona opciones del usuario y la computadora
    # y valida si son válidas.
    # Si no son válidas, retorna None.

¿Cómo separar las reglas del juego en otra función?

Otra buena práctica es extraer la lógica que define las reglas del juego en función separada. Esto ayuda a aislar la lógica compleja y hace que el código principal sea más fácil de entender.

def check_rules(user_options, computer_options):
    # Código que valida las reglas y retorna los puntajes actualizados.

¿Cómo crear la función principal del juego?

La función principal debería ser un punto de entrada claro para el juego, ejecutando todas las otras funciones necesarias para correr el juego adecuadamente.

def run_game():
    user_wins = 0
    computer_wins = 0
    rounds = 0
    while True:
        # Llamadas a funciones y lógica del ciclo
        user_options, computer_options = choose_options()
        user_wins, computer_wins = check_rules(user_options, computer_options, user_wins, computer_wins)

¿Cómo mejorar la mantenibilidad del código con funciones?

Refactorizar el código usando funciones reduce errores y simplifica futuras modificaciones o añadidos. Es importante siempre mantener cada función enfocada en una única responsabilidad, lo cual promueve un diseño de código más limpio y profesional. Al final, las funciones actúan como bloques independientes pero interconectados, cada uno resolviendo una parte del problema de programación total.

Utiliza este enfoque para todos tus proyectos futuros. Te hará un mejor programador y te facilitará el trabajo en equipo, ya que otros podrán entender tu código de manera más rápida y clara. Sigue practicando y atrévete a modificar el código de maneras distintas para encontrar la que mejor se adapte a ti. ¡No dudes en seguir adelante porque el aprendizaje nunca se detiene cuando se trata de programación!

Aportes 342

Preguntas 30

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Re armar el programa en base a un proyecto anterior termina siendo confuso. Era mejor empezar desde cero, uno se pasa mas tiempo tratando de seguir el armado de este Frankestein que aplicando lo aprendido hasta ahora.

Mi aporte:

import random 

print("""
      [ 🤖 Bienvenido al juego Piedra, Papel o tijera 🙋]
                  >>> Ingresa una opción <<<
      """)


def choose_options():
    options = ('piedra', 'papel', 'tijera')
    user_option = input('>>> Piedra, papel o tijera => ').lower()
   
    if not user_option in options:
        print('Esa opción no es valida')
        #continue
        return None, None 
    
    computer_option = random.choice(options)

    print('User option => ', user_option)
    print('Computer option => ', computer_option)
    return user_option, computer_option


def check_rules(user_option, computer_option, user_wins, computer_wins):
    if user_option == computer_option:
        print('Empate!\n')
    elif user_option == 'piedra':
        if computer_option == 'tijera':
            print('🪨 Piedra gana a tijera ✂️')
            print('¡User gana!\n')
            user_wins += 1
        else:
            print('📄 Papel gana a piedra 🪨')
            print('¡Computer gana!\n')
            computer_wins += 1
    elif user_option == 'papel':
        if computer_option == 'piedra':
            print('📄 Papel gana a piedra 🪨')
            print('¡User gana!\n')
            user_wins += 1
        else:
            print('✂️ Tijera gana a papel 📄')
            print('¡Computer gana!\n')
            computer_wins += 1
    elif user_option == 'tijera':
        if computer_option == 'papel':
            print('✂️ Tijera gana a papel 📄')
            print('¡User gana!\n')
            user_wins += 1
        else:
            print('🪨 Piedra gana a tijera ✂️')
            print('¡Computer gana!\n')
            computer_wins += 1
            
    return user_wins, computer_wins


def check_winner(user_wins, computer_wins):
    
    print(f'''
    🤖 Computer wins: {computer_wins}
    🙋 User wins: {user_wins}
            ''')
    
    if user_wins == 3:
        print('🎖️ El ganador es User 🎖️')
        exit()
        
    if computer_wins == 3:
        print('🎖️ El ganador es Computer 🎖️')
        exit()


def run_game():
    
    computer_wins = 0 
    user_wins = 0
    rounds = 1

    while True:
        print('***' * 10)
        print('Round ', rounds)
        print('***' * 10)

        rounds += 1
              
        user_option, computer_option = choose_options()
        user_wins, computer_wins = check_rules(user_option, computer_option,user_wins, computer_wins)
        check_winner(user_wins, computer_wins) 
        
                    
run_game()

Extraño a Facundo, este men no sabe explicar bien.

Aquí les dejo otra opción. Ejemplo de como las matemáticas nos pueden ayudar a reducir código

Los cursos anteriores con el profe Facundo, eran excelentes, pero estos están increiblemente aun mejor! maravilloso, excelente muestra de que Platzi implementa mejora ocntinua.

Con algo de Art ASCII:

Me gusta hacer los ejercicios que propone el maestro antes de ver el video.

Si me sale igual que a él, confirmo mi conocimiento.
Si me sale distinto, aprendo algo nuevo.
Si no me sale, no me frustro y veo la clase para ver como se resolvía el problema que no me dejó avanzar.

En cualquier caso, salgo ganando 😁. 100% recomendado 👌

Es muy feo refactorizar, pero mas vale acostumbrarse, es parte del trabajo. Les dejo la función que faltaba al reto

def check_wins(user_wins, computer_wins):
  if computer_wins == 2:
    print('El ganador es la computadora')
    exit()
  
  if user_wins == 2:
    print('El ganador es el usuario')
    exit()

Esta clase se fue de las manos :S

Sin duda la identación es un tema a tener muy en cuenta a la hora de realizar nuestros códigos.

Mi aportación agregando el def check_winner:

import random


def choose_options():
  options = ('piedra', 'papel', 'tijera')
  user_option = input('piedra, papel o tijera =>')
  user_option = user_option.lower()
  
  if not user_option in options:
    print('No es una opcion valida')
    # continue
    return None, None

  computer_option = random.choice(options)

  print('User option => ', user_option)
  print('Computer option => ', computer_option)
  return user_option, computer_option

def check_rules(user_option, computer_option, user_wins, computer_wins):
  if user_option == computer_option:
    print('Empate!')
  elif user_option == 'piedra':
    if computer_option == 'tijera':
      print('piedra gana a tijera')
      print('user gano!')
      user_wins += 1
    else:
      print('Papel gana a piedra')
      print('Computer gano!')
      computer_wins +=1
  elif user_option == 'papel':
    if computer_option == 'piedra':
      print('papel gana a piedra')
      print('user gano!')
      user_wins += 1
    else:
      print('Tijera gana a papel')
      print('Computer gano!')
      computer_wins +=1
  elif user_option == 'tijera':
    if computer_option == 'papel':
      print('Tijera gana a papel')
      prin('User gano')
      user_wins +=1
    else:
      print('piedra gana a tijera')
      print('Computer gano!')
      computer_wins +=1
  return user_wins, computer_wins

def check_winner(user_wins, computer_wins):
    if computer_wins == 2:
      print('El ganador es la computadora')
      exit()
    if user_wins == 2:
      print('El ganador es el usuario')
      exit()

def run_game():
  computer_wins = 0
  user_wins = 0
  rounds = 1
  while True:
    print('*' * 10)
    print('ROUND', rounds)
    print('*' * 10)
  
    print('computer_wins', computer_wins)
    print('user_wins', user_wins)
    rounds += 1

    user_option, computer_option = choose_options()
    user_wins, computer_wins = check_rules(user_option, computer_option,user_wins, computer_wins)
    check_winner(user_wins, computer_wins)
run_game()

A mi pareció bien, muy ajustado a la realidad en cuento a lo que corresponde a retomar código y refactorizar.

En muchas ocasiones tenemos que hacer cambios a código que hemos hecho meses atrás y eso es difícil.

No me había tocado alguna clase con tantas quejas, recuerden que el inglés es indispensable para crecer en este ámbito (Yo diría que ya es indispensable para cualquier profesión en este mundo globalizado); re-factorizar es necesario para trabajar en cualquier empresa con software existente (se llama dar mantenimiento al código) no siempre se podrá empezar desde cero ya que implica costos elevados y tiempo; adaptarse y eliminar esos sesgos cognitivos que impiden nuestro crecimiento (Si pueden inviertan en su salud mental).

Aquí les dejo un articulo que les puede ayudar.
(https://www.psiquion.com/blog/sesgos-cognitivos#:~:text=Los sesgos cognitivos son un,hora de interpretar la realidad.)

No se desanimen, y piensen positivo (pero no se excedan que también hace daño jajaja)

Y pensaba que en el curso anterior ya habiamos logrado lo máximo cno el juego de piedra papel o tijera

Esta clase es la primera que no me gustó, es mejor cuando se empieza desde 0 los códigos, hay cosas que uno no recuerda del todo bien y al modificar un código viejo, uno se pierde más 😭

no se podia hacer ese ejemplo desde cero? porque no entendi nada nada, quitar poner modificar asi no entendi

este curso y con todo en ingles queda uno loco

Todo un reto esto de refactorizar pero ayuda a tener otra perspectiva ✔

Les comparto mi código refactorizado, incluí una validación para que no muestre como Empate las opciones no válidas (que retornan None, None) y la función check_winner

# Refactor game

import random

def choose_options():

  # Creamos una tupla de opciones
  options = ("piedra", "papel", "tijera")

  # Solicitamos la opcion al usuario
  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 in options:
    print(f"La opcion {user_option} no es válida")
    #continue
    return None, None
  
  # Seleccionamos la opción de manera aleatoria
  computer_option = random.choice(options)
  print("computer => ", computer_option)

  # La funcion retorna multiples valores
  return user_option, computer_option

def check_rules(user_option, computer_option, user_wins, computer_wins):
  if user_option == computer_option and (user_option != None and computer_option != None):
    print("Empate!")
  elif user_option == "piedra":
    if computer_option == "tijera":
      print(f"{user_option} gana a {computer_option}. User ganó!")
      user_wins += 1
    else:
      print(f"{computer_option} gana a {user_option}. Computer ganó!")
      computer_wins += 1
  elif user_option == "papel":
    if computer_option == "piedra":
      print(f"{user_option} gana a {computer_option}. User ganó!")
      user_wins += 1
    else:
      print(f"{computer_option} gana a {user_option}. Computer ganó!")
      computer_wins += 1
  elif user_option == "tijera":
    if computer_option == "papel":
      print(f"{user_option} gana a {computer_option}. User ganó!")
      user_wins += 1
    else:
      print(f"{computer_option} gana a {user_option}. Computer ganó!")
      computer_wins += 1
  
  return user_wins, computer_wins

def check_winner(user_wins, computer_wins):
  if computer_wins == 2:
      print("El ganador es la computadora!")
      exit()
  if user_wins == 2:
      print("El ganador es el usuario!")
      exit()

def run_game():
  # Contadores de rondas ganadas
  computer_wins = 0
  user_wins = 0
  # Contador de rondas
  rounds = 1
  
  while True:

    print("*" * 10)
    print("ROUND", rounds)
    print("*" * 10)
  
    print("computer_wins =>", computer_wins)
    print("user_wins =>", user_wins)

    # Incrementamos el contador de rondas
    rounds += 1
  
    # Almacenamos los valores retornados por la funcion
    user_option, computer_option = choose_options()
  
    user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins)

    check_winner(user_wins, computer_wins)

run_game()

No entendi nada

*pensé que era el único que le costo bastante esta clase*

Me parece muy útil que se definan funciones y que se agrupe las líneas de código en cada función y que no queden líneas sueltas. Como Python es el primer lenguaje que estoy aprendiendo, supongo que cuando se elabora programas más complejos se elabora primero los alcances de cada bloque. Hice unos bloques para entender mejor el código del juego piedra, papel o tijera.

![](

me ha gustado mucho el curso, sin embargo, esta clase se puede prestar para confusión por la indentación al corregir un código como este

Es bastante confuso todos los pasos y cortes de codigo que hay para el uso de de las funciones, considero es mejor hacer el ejercicio desde 0 para aprender mejor

Excelente ejercicio, realizar una factorización es de las mejores maneras de aprender.
Este ejercicio toma su tiempo entenderlo, sobre todo entender el flujo de las variables y cómo van cambiando.

Aquí esta mi aporte mejorado con func y variables globales, es un appraoch diferente:

import random
# Define the options
options = ('piedra', 'papel', 'tijera')

while True:

  counter = 0
  empate = 0
  perdiste = 0
  ganaste = 0
  
  # Define the results dictionary
  results = {
    'piedra': {
      'piedra': 'empate',
      'papel': 'perdiste',
      'tijera': 'ganaste'
    },
    'papel': {
      'piedra': 'ganaste',
      'papel': 'empate',
      'tijera': 'perdiste'
    },
    'tijera': {
      'piedra': 'perdiste',
      'papel': 'ganaste',
      'tijera': 'empate'
    }
  }
  
  def preprocess_game(chosen_option):
    global empate, perdiste, ganaste
    random_value = random.choice(options)
    result = results[chosen_option][random_value]
    if result == 'empate':
      empate += 1
    elif result == 'perdiste':
      perdiste += 1
    else:
      ganaste += 1
    print(
      f"{result}, elegiste {chosen_option} y la máquina eligió {random_value}."
    )
  
  # Prompt the user to choose an option
  for i in range(3):
    print('*' * 10)
    print('ROUND ', counter + 1)
    print('*' * 10)
    for index, chosen_option in enumerate(options):
      print(f"{index+1}. {chosen_option}")
  
    # Get user input and convert to integer
    while True:
      try:
        option_selected = int(
          input("Ingresa el número de la opción que deseas: "))
        counter += 1
        if option_selected < 1 or option_selected > len(options):
          print(
            "Ese número no es una opción válida. Por favor, ingresa un número del 1 al 3."
          )
        if counter <= 3:
          preprocess_game(options[option_selected - 1])
          #print(empate, perdiste, ganaste)
        if counter == 3:
          # Get the variable name with the maximum value
          max_var = max(['empate', 'perdiste', 'ganaste'], key=locals().get)
          
          # Check if the machine or the player won
          if max_var == 'empate':
            print('\033[33m' + 'Hubo un empate por lo que volveras a jugar' + '\033[0m')
            break
            
          elif max_var == 'perdiste':
            print('\033[31m' + 'La máquina ganó' + '\033[0m')
            break
          else:
            print('\033[32m' + 'Ganasteeeee!' + '\033[0m')
            # Print the results
            print("\nResultados finales:\n")
            print(f"\033[33mEmpates:\033[0m {empate}")
            print(f"\033[31mPerdiste:\033[0m {perdiste}")
            print(f"\033[32mGanaste:\033[0m {ganaste}")
            break
        else:
          break
      except ValueError:
        print("Ese no es un número. Por favor, ingresa un número del 1 al 3.")
        
  # check if is empate to iterate again
  if max_var != 'empate':
    # exit the while loop
    break

En mi caso, decidí hacer algunos cambios en la lógica del combate (utilicé la lógica que Freddy Vega usa en el curso de introducción a la programación), además de añadirle una lista de narradores y una de oponentes que son elegidos al azar para hacer más interactivo y visual el proyecto. Mi meta es hacer más complejo este juego conforme avance en los cursos:

"""
PIEDRA, PAPEL o TIJERAS MK2

Esta es una versión mejorada del juego realizado en el curso básico de Python mediante la implementación de funciones, alcance(scope) y 
"""

import random as rd

opponents = ('SHELLMINATOR', 'K-REN 9000', 'PYMASTER 420')
narrators = ('BOB THOMPSON', 'COTTON MCKNIGHT', 'JOHN DOE')

# ASIGNACION DE PERSONAJES:
narrator = rd.choice(narrators)
user_name = input(f'[{narrator}]: ¿Cómo te llaman en las calles?\n> ').capitalize()
opponent = rd.choice(opponents)

# FUNCIONES:
def weapon_select():
  weapons = ('piedra', 'papel', 'tijeras')
  user_weapon = input(f'[{narrator}]: ¿Qué escogerá "{user_name}", piedra, papel o tijeras?\n> ').lower()
  
  if not user_weapon in weapons:
    print(f'[{narrator}]: ¿PERO QUÉEEE? {user_name} ESCOGIÓ {user_weapon}, lo cual no es una opción válida')
    return None, None
  
  print(f'[{narrator}]: {user_name} escogió ¡¡¡{user_weapon}!!!')
  opponent_weapon = rd.choice(weapons)
  print(f'[{narrator}]: {opponent} escogió ¡¡¡{opponent_weapon}!!!')
  return user_weapon, opponent_weapon

def duel(user_weapon,opponent_weapon,user_wins,opponent_wins):

  if user_weapon == opponent_weapon:
    print(f'[{narrator}]: ¡¡ESTO ES UN EMPATE!!')
  elif user_weapon == 'piedra' and opponent_weapon == 'tijeras':
    print('GANASTE')
    user_wins +=1
  elif user_weapon == 'papel' and opponent_weapon == 'piedra':
    print('GANASTE')
    user_wins +=1
  elif user_weapon == 'tijeras' and opponent_weapon == 'papel':
    print('GANASTE')
    user_wins +=1
  else:
    print('PERDISTE')
    opponent_wins +=1

  return user_wins, opponent_wins

def check_scores(opponent_score, user_score):
  print(f'[{narrator}]: ESTE ES EL MARCADOR ACTUAL:\n[{user_name}]: {user_score}\n[{opponent}]: {opponent_score}')
  if opponent_score == 2:
    print(f'{opponent} GANÓ')
  elif user_score == 2:
    print(f'{user_name} GANÓ')
    
def game():
  user_wins = 0
  opponent_wins = 0
  rounds = 1

  while rounds < 3:
    user_weapon, opponent_weapon = weapon_select()
    user_wins, opponent_wins = duel(user_weapon,     opponent_weapon,user_wins,opponent_wins)

    check_scores(opponent_wins, user_wins)
    rounds += 1

# INICIO DEL JUEGO:
game()
Buena clase profe. Creo que hacer algunos ejercicios de este tipo ayuda bastante para aprender y tener en cuenta los retos a los que se enfrenta uno cuando refactoriza algún programa. Sí, puede ser algo tedioso y hasta frustrante al principio, pero es algo que nos guste o no tendremos que hacer en algún momento. No siempre podremos "empezar de cero todo", a veces toca adaptarnos a la situación dada y trabajar sobre lo que tenemos.
Yo también me perdí la primera vez que vi la clase, ah pesar que ya había hecho Python Fundamental, pero poco a poco desglosé el código, y las cosas que no entendí oh las funciones que había en el código a su costado puse un comentario para no perderme
me perdí mucho en el proyecto y eso que me ayudé de los recursos, no me vuelvan a hacer eso, por favor
No entendí nada, está muy perdido ajustar un código, siento que eso debería ser para avanzado. Podríamos haber armado mejor el juego de nuevo y ya después entender que fue lo que se modificó y porque, ya que hacerlo sobre el mismo código para un principiante es muy confuso

La verdad esque estoy de acuerdo con varios usuarios. Debio hacer esto con funciones desde 0. Desarmar y armar todo el codigo causa mucha confusion, toca ver el video una primera vez para ver como lo hace, una segunda para armarlo y una tercera para corregir los errores al hacerlo para emular su codigo, es terriblemente trabajoso y no se siente como poner en practica lo aprendido sino tratar de seguir su ritmo.

Este es el tipo de clases que no permiten progresar fácilmente en un curso, una clase de 16 minutos en la que puedes durar más de tres horas intentando entender malas explicaciones

Mi mente al rearmar lo que ya había entendido bien xD

Mi único cambio sugerido al código del juego por el momento es modificar la impresión del contador, con las veces que gana la computadora y el usuario, me parece que se entiende mejor ponerlo al final, de lo contrario el resultado no llega a 2.

como que tenia prisa!!!

No entiendo nada. Bah, en realidad sí entiendo lo que hace pero no entiendo cómo se da cuenta de todas esas cosas. Puedo copiar el código e ir siguiendo lo que dice el profe, pero falta un poco más de explicaciones con respecto a porqué decide tal o cual cosa.

en esta clase no entendi NADAAAAA, mala idea escoger un codigo largo.

salio mejor, reescribir el juego que solo modificarlo

Entiendo lo que el profe empezó hacer, pero debió hacerlo desde el principio del curso, ya que veníamos viendo otros temas,

o por lo menos partir la clase en funciones más pequeñas

Que tristeza yo quede mas perdido no entendí nada para mi fue mas confusión

Esta es ni solución

import random

OPTION = ('piedra', 'papel', 'tijera')
score_gamer = 0
score_user = 0

def choose_option() -> str:
    """Elegimos piedra, papel o tijera"""

    game_option = random.choice(OPTION)
    user_option = input("Teclea opcion: Piedra, Papel o Tijera: ").lower()

    return game_option, user_option


def select_winner (game, user):
    """Seleccionamos quien ha sido el ganador de la jugada"""
    global score_gamer
    global score_user
    # Opciones ganadoras
    battle_result = [
        [4, 1, 0],
        [1, 4, 2],
        [0, 2, 4]
    ]
    game_idx = OPTION.index(game)
    user_idx = OPTION.index(user)
    if game == user:
        return 'Empate'
    else:
        win = battle_result[game_idx][user_idx]
        if game == OPTION[win]:
            score_gamer += 1
            return "Game"
        if user == OPTION[win]:
            score_user += 1
            return "User"

# Press the green button in the gutter to run the script.
if __name__ == '__main__':

    while True:
        game_option, user_option = choose_option()
        print(f'Game -> {game_option}, User -> {user_option}')
        winner = select_winner(game_option, user_option)
        print(f'El ganador es {winner}')
        print(f'PUNTUACION. Game = {score_gamer} / User = {score_user}')
        # Queremos continuar el juego
        seguir = input("Quiere jugar otra partida (S/N): ")
        print(seguir)
        if seguir.lower() != 's':
            print("No continua el juego")
            break
        print("Continua el juego")

Alguien se a preguntado ¿Por qué la computadora gana un 98.9%?

Para jugar con la compu y un amigo.

#PIEDRA, PAPEL y TIJERA PROYECTOOO
print()
print("BIENVENIDO AL JUEGO DE PIEDRA, PAPEL Y TIJERA")
print(" \n ")

bis = {1: "Piedra", 2: "papel", 3: "tijeras"}

compu = 0
jugador = ""
jugador2 = ""
conjuga = 0
concom = 0
ronda = 1


#validacion y eleccion compu
def validacione(e, f):
  e = input(
    f"{f}Ingrese 1-piedra, 2-papel y 3-tijera o algun numero al lado de lado de la palabra "
  )
  e=e.lower()
  
  print()
  while not (e == "1" or e == "2" or e == "3" or e == "piedra" or e == "papel"
             or e == "tijera"):
    print()
    e = input(
      f"{f}por favor ingrese 1-piedra, 2-papel y 3-tijera o algun numero al lado de lado de la                   palabra "
    )  #Validacion de que ingrese un dato correcto
  return e


def validacion(a, j):
  bib = {"piedra": 1, "papel": 2, "tijera": 3}

  if a == "1" or a == "2" or a == "3":
    a = int(a)
  else:
    a = bib[a]
  print(j, (bis[a]))
  return a


#compu eleccion
def computa(b):
  import random
  eleccioncom = [1, 2, 3]
  random.shuffle(eleccioncom)
  b = random.choice(eleccioncom)
  print()
  print("Computadora", bis[b])
  print()
  return b


#Eleccion de juego
elecc = (input("Ingrese 1-Jugar solo 2-Jugar con amigo"))
print("\n")
while not (elecc == "1" or elecc == "2"):
  elecc = (input("Por favor ingrese 1-Jugar solo 2-Jugar con amigo"))

if elecc == "1":
  #Llamadas

  jugador = validacione(jugador, "")

  print("RONDA", ronda)
  print()
  jugador = validacion(jugador, "Jugador")

  compu = computa(compu)

  #Comparacion
  while conjuga < 3 and concom < 3:

    if ((jugador > compu and jugador == 1 and compu == 2) or
        (jugador < compu and jugador == 1
         and compu == 3)) or (jugador == 2 and jugador > compu) or (
           (jugador == 3 and compu == 2 and jugador > compu) or
           (jugador == 3 and jugador < compu)):
      print("Gana jugador")
      conjuga += 1
    elif jugador == compu:
      print("Empate")
    else:
      print("Gano compu")
      concom += 1

    print(f"jugador lleva {conjuga}  compu lleva {concom}")
    if conjuga < 3 and concom < 3:
      ronda += 1
      print("\n")
      print("RONDA", ronda)
      print()
      jugador = validacione(jugador, "")
      jugador = validacion(jugador, "Jugador")
      compu = computa(compu)

    if conjuga==3:
      print("GANA JUGADOR 1") 
    elif concom==3:
      print("GANA COMPUTADORA")
  

else:
  print("RONDA 1")
  jugador = validacione(jugador, "Turno de jugador 1--> ")
  jugador2 = validacione(jugador2, "Turno de jugador 2--> ")
  print("")
  jugador = validacion(jugador, "Jugador 1--> ")
  print("")
  jugador2 = validacion(jugador2, "Jugador 2--> ")

while conjuga < 3 and concom < 3:

  if ((jugador > jugador2 and jugador == 1 and jugador2 == 2) or
      (jugador < jugador2 and jugador == 1
       and jugador2 == 3)) or (jugador == 2 and jugador > jugador2) or (
         (jugador == 3 and jugador2 == 2 and jugador > jugador2) or
         (jugador == 3 and jugador < jugador2)):
    print("Gana jugador 1")
    conjuga += 1
  elif jugador == jugador2:
    print("Empate")
  else:
    print("Gano jugador 2")
    concom += 1

  print(f"jugador 1 lleva--> {conjuga}  jugador 2--> lleva {concom}")
  if conjuga < 3 and concom < 3:
    ronda += 1
    print("\n")
    print("RONDA", ronda)
    print()

    jugador = validacione(jugador, "Turno jugador 1--> ")
    jugador2 = validacione(jugador2, "Turno de jugador 2--> ")
    print("")
    jugador = validacion(jugador, "Jugador 1 --> ")
    print("")
    jugador2 = validacion(jugador2, "Jugador 2--> ")
    print("")
  if conjuga==3:
   print("GANA JUGADOR 1") 
  elif concom==3:
    print("GANA JUGADOR 2")
  

Mi aporte ^^

import random

def choose_options():
    options = ('piedra', 'papel', 'tijera')
    user_option = input('piedra, papel o tijera => ').lower()
    
    if not user_option in options:
        print('🤚 Esa opcion no es valida')
        return None, None
    
    computer_option = random.choice(options)
    return user_option, computer_option
    
def who_wins_this_round(user_opt, computer_opt, scores):
    winner = ''
    user_win_condition = [ ('tijera', 'papel'), ('papel', 'piedra'), ('piedra', 'papel') ]
    
    if user_opt == computer_opt:
        winner = "🛑"
    else:
        user_win = (user_opt, computer_opt) in user_win_condition
        winner = '👤' if user_win else '💻'
        scores[winner] = scores.get(winner, 0) + 1
    print(f"[👤 {scores['👤']}] {user_opt}\n[💻 {scores['💻']}] {computer_opt}\nGanador: {winner}!")

def who_wins_this_game(scores):
    if any(map(lambda s: s >= 3, scores.values())):
        winner = max(scores, key=scores.get)
        print(f'El ganador del juego es ---> {winner}')
        exit()

def run_game():
    scores = {
        '👤': 0,
        '💻': 0,
    }
    rounds = 1
    while True:
        print(f'\n[Round #{rounds}] ', end='')
        user_option, computer_option = choose_options()
        if None not in [user_option, computer_option]:
            who_wins_this_round(user_option, computer_option, scores)
            who_wins_this_game(scores)
            rounds += 1
run_game()

mi aporte un poco optimizado

<code> import random

# Define las opciones y las reglas del juego
OPTIONS = {'piedra': {'tijera': 'user', 'papel': 'cpu'},
           'papel': {'piedra': 'user', 'tijera': 'cpu'},
           'tijera': {'papel': 'user', 'piedra': 'cpu'}}

def choose_options():
    user_option = input('piedra, papel o tijera => ').lower()
    if user_option not in OPTIONS:
        print('esa opcion no es valida')
        return None, None
    cpu_option = random.choice(list(OPTIONS.keys()))
    print('user option =>', user_option)
    print('cpu option =>', cpu_option)
    return user_option, cpu_option

def check_rules(user_option, cpu_option, user_wins, cpu_wins):
    result = OPTIONS[user_option][cpu_option]
    if result == 'user':
        print(f'{user_option} gana a {cpu_option}')
        print('¡user gana!')
        user_wins += 1
    elif result == 'cpu':
        print(f'{cpu_option} gana a {user_option}')
        print('¡cpu gana!')
        cpu_wins += 1
    else:
        print('¡EMPATE!')
    return user_wins, cpu_wins

def run_game():
    cpu_wins = 0
    user_wins = 0
    for round in range(1, 4):
        print('*' * 12)
        print(f'ROUND {round}')
        print('*' * 12)
        print('-' * 12)
        print(f'points USER => {user_wins}')
        print(f'points CPU => {cpu_wins}')
        print('-' * 12)
        user_option, cpu_option = choose_options()
        if user_option is None:
            continue
        user_wins, cpu_wins = check_rules(user_option, cpu_option, user_wins, cpu_wins)
        if cpu_wins == 2:
            print('*** ¡El ganador rotundo es la CPU! ***')
            break
        elif user_wins == 2:
            print('*** ¡El ganador rotundo es la USER! ***')
            break

# Ejecuta el juego
run_game()

hago mi aporte con mi refactorizacion del codigo. Dicho codigo es diferente al propuesto en esta clase ya que trate de optimizar la ejecucion de las reglas por medio de una tupla

import random

def game_stats(rounds, user_wins, computer_wins):
    print("*" * 10)

    print("Ronda", rounds, ": ")

    print("*" * 10)

    print("Victorias de user: ", user_wins, "/ 2")

    print("Victorias de computer: ", computer_wins, "/ 2")

    print("*" * 10)

    print("Elige una opcion: ") 

def player_options_selection():
    options = ("piedra", "papel", "tijeras")
    user_option = input('piedra, papel o tijeras => ')
    user_option = user_option.lower()

    while not user_option in options:
        print("Elige una opcion valida: ")
        user_option = input('piedra, papel o tijeras => ')

    computer_option = random.choice(options)

    print("*" * 10)

    print("Opcion de user: ", user_option)

    print("opcion de computer:", computer_option)

    return user_option, computer_option

def round_winner(user_option, computer_option, user_wins, computer_wins):
    win = ("piedratijeras", "tijeraspapel", "papelpiedra")

    fight = user_option + computer_option

    print("Resultado: ")

    if user_option == computer_option:
        print('Empate!')

    elif fight in win:
        print("user gana la ronda")
        user_wins +=1

    else:
        print("computer gana la ronda")
        computer_wins +=1

    print("*" * 10)

    return user_wins, computer_wins

def match_winner(user_wins, computer_wins):
    if user_wins > computer_wins:
        print("User gana la partida")

    else: 
        print("Computer gana la partida")

def run_game():
    rounds = 1

    user_wins = 0

    computer_wins = 0

    while user_wins != 2 and computer_wins != 2:

        game_stats(rounds, user_wins, computer_wins)

        user_option, computer_option = player_options_selection()

        user_wins, computer_wins = round_winner(user_option, computer_option, user_wins, computer_wins)

        rounds +=1

    match_winner(user_wins, computer_wins)

run_game()

ejercicio de piedra papel o tijera


# Imports
import random
import time
import getpass

# Write animation
def write_fx(frase):
    for letra in frase:
        print(letra, end='', flush=True)
        time.sleep(0.010)
    
# game
def play(num1, num2, cpu_cs):
     
    empty = 0

    computer_wins = 0

    user_wins = 0

    rounds = 0


    while True:
        
        num2 = random.choice(cpu_cs)


        if num1 == num2:
            time.sleep(1)
            result = '\n    [*] Nadie gana'
            empty += 1
            rounds += 1

        elif num1 =='tijeras' and num2 == 'piedra' or num1 == 'papel' and num2 == 'tijeras' or num1 == 'piedra' and num2 == 'papel':
            time.sleep(1)
            result = '\n    [*] La maquina gana'
            computer_wins += 1
            rounds += 1

        elif num1 == 'piedra' and num2 == 'tijeras' or num1 == 'tijeras' and num2 == 'papel' or num1 == 'papel' and num2 == 'piedra':
            time.sleep(1)
            result = '\n    [*] El jugador gana'
            user_wins += 1
            rounds += 1

        if user_wins == 2:
            write_fx(f'''   
    Resultado de Partida numero {rounds}   
                
            {result}

    La seleccion de la maquina fue {num2}''')
            table('EL Usuario :D', rounds, user_wins, computer_wins, empty)
            break

        elif computer_wins == 2:
            write_fx(f'''   
    Resultado de Partida numero {rounds}   
                
            {result}

    La seleccion de la maquina fue {num2}''')
            table('La Maquina :D', rounds, user_wins, computer_wins, empty)
            break

        else:
            write_fx(f'''   
    RESULTADO DE PARTIDA NUMERO {rounds}   
                
            {result}

    La seleccion de la maquina fue {num2}''')

                
            write_fx(f'''
            
    vuelve a escoger entre 
            
    [*] Piedra
    [*] Papel
    [*] Tijeras
            
    para la siguiente ronda: ''')
            
            num1 = input('').lower().replace(' ','')

            if num1 not in cpu_cs:
                write_fx('\n    Comando no valido')
                time.sleep(1)
                
                write_fx(f'''
            
    vuelve a escoger entre 
            
    [*] Piedra
    [*] Papel
    [*] Tijeras
            
    para la siguiente ronda: ''')
                num1 = input('').lower().replace(' ','')
                continue

# User Interface
def table(nom, var1, var2, var3, var4):
    time.sleep(1)
    write_fx(f'''
    
     ________________________________________________________________
    | Partidas | ganadas por usuario | ganadas por maquina | Empates |
    |------------------------------------------------------|---------|
    |     {var1}    |         {var2}           |         {var3}           |    {var4}    |
     ----------------------------------------------------------------
    
    El ganador de la ronda es  {nom} 

                        
                        
                         ██████╗   ██████╗
                        ██╔════╝  ██╔════╝
                        ██║░░██╗  ██║░░██╗
                        ██║░░╚██╗ ██║░░╚██╗
                        ╚██████╔╝ ╚██████╔╝
                         ╚═════╝   ╚═════╝

    ''')


def home():
    choices = ('piedra', 'papel', 'tijeras')

    write_fx ('''
    
    Bienvenido a piedra, papel o tijeras

    El juego es en partidas, el primero en ganar
    2 partidas gana la ronda.

    [*] Piedra
    [*] Papel
    [*] Tijeras
    
    Escribe cual va a escoger aca --> ''')

    user_cs = input('').lower().replace(' ','')

    comp_cs = random.choice(choices)

    if user_cs not in choices:
        write_fx('\n    Comando no valido')
        time.sleep(1)
        home()

    else:
        play(user_cs, comp_cs, choices)

        write_fx(f'\n\n    Preciona enter para volver a jugar')
        getpass.getpass(' ')
        home()

if __name__ == '__main__':
    home()

La verdad, me costó un poco, pero se hizo así:

import random

def choose_options():
options = (‘piedra’, ‘papel’, ‘tijera’)
user_option = input('piedra, papel o tijera => ')
user_option = user_option.lower()

if not user_option in options:
print(‘esa opcion no es valida’)
# continue
return None, None

computer_option = random.choice(options)

print(‘User option =>’, user_option)
print(‘Computer option =>’, computer_option)
return user_option, computer_option

def check_rules(user_option, computer_option, user_wins, computer_wins):
if user_option == computer_option:
print(‘Empate!’)
elif user_option == ‘piedra’:
if computer_option == ‘tijera’:
print(‘piedra gana a tijera’)
print(‘user gano!’)
user_wins += 1
else:
print(‘Papel gana a piedra’)
print(‘computer gano!’)
computer_wins += 1
elif user_option == ‘papel’:
if computer_option == ‘piedra’:
print(‘papel gana a piedra’)
print(‘user gano’)
user_wins += 1
else:
print(‘tijera gana a papel’)
print(‘computer gano!’)
computer_wins += 1
elif user_option == ‘tijera’:
if computer_option == ‘papel’:
print(‘tijera gana a papel’)
print(‘user gano!’)
user_wins += 1
else:
print(‘piedra gana a tijera’)
print(‘computer gano!’)
computer_wins += 1
return user_wins, computer_wins

def check_winner(user_wins, computer_wins):
if computer_wins == 2:
print(‘El ganador es la computadora’)
#break
exit()

if user_wins == 2:
print(‘El ganador es el usuario’)
#break
exit()

def run_game():
computer_wins = 0
user_wins = 0
rounds = 1
while True:
print(’’ * 10)
print(‘ROUND’, rounds)
print(’
’ * 10)

print('computer_wins', computer_wins)
print('user_wins', user_wins)
rounds += 1

user_option, computer_option = choose_options()
user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins)
check_winner(user_wins, computer_wins)

run_game()

* ```python import random options = ['piedra', 'papel', 'tijera'] def choose_options(): user_option = input('piedra, papel o tijeras => ') user_option = user_option.lower() if user_option == 'tijeras': user_option = 'tijera' if user_option not in options: print('Esa opción no es válida') return None, None computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option, computer_option def check_rules(user_option, computer_option, user_win, computer_win): if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('Piedra gana a tijera') print('User ganó!') user_win += 1 else: print('Papel gana a piedra') print('Computer ganó!') computer_win += 1 elif user_option == 'papel': if computer_option == 'piedra': print('Papel gana a piedra') print('User ganó!') user_win += 1 else: print('Tijera gana a papel') print('Computer ganó!') computer_win += 1 elif user_option == 'tijera': if computer_option == 'papel': print('Tijera gana a papel') print('User ganó!') user_win += 1 else: print('Piedra gana a tijera') print('Computer ganó!') computer_win += 1 return user_win, computer_win def check_win(user_win, computer_win): if computer_win == 2: print('El ganador es la computadora') return True if user_win == 2: print('El ganador es el usuario') return True return False def run_game(): computer_win = 0 user_win = 0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_win:', computer_win) print('user_win:', user_win) rounds += 1 user_option, computer_option = choose_options() if user_option is None: continue user_win, computer_win = check_rules(user_option, computer_option, user_win, computer_win) if check_win(user_win, computer_win): break run_game() ```
Terminó siendo un desastre
import random def choose\_options(): options = ('piedra', 'papel', 'tijera') user\_option = input('piedra, papel o tijera => ') user\_option = user\_option.lower() if not user\_option in options: print('esa opcion no es valida') \# continue return None, None computer\_option = random.choice(options) print('User option =>', user\_option) print('Computer option =>', computer\_option) return user\_option, computer\_option def check\_rules(user\_option, computer\_option, user\_wins, computer\_wins): if user\_option == computer\_option: print('Empate!') elif user\_option == 'piedra': if computer\_option == 'tijera': print('piedra gana a tijera') print('user gano!') user\_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer\_wins += 1 elif user\_option == 'papel': if computer\_option == 'piedra': print('papel gana a piedra') print('user gano') user\_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer\_wins += 1 elif user\_option == 'tijera': if computer\_option == 'papel': print('tijera gana a papel') print('user gano!') user\_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer\_wins += 1 return user\_wins, computer\_wins def run\_game(): computer\_wins = 0 user\_wins = 0 rounds = 1 while True: print('\*' \* 10) print('ROUND', rounds) print('\*' \* 10) print('computer\_wins', computer\_wins) print('user\_wins', user\_wins) rounds += 1 user\_option, computer\_option = choose\_options() user\_wins, computer\_wins = check\_rules(user\_option, computer\_option, user\_wins, computer\_wins) if computer\_wins == 2: print('El ganador es la computadora') break if user\_wins == 2: print('El ganador es el usuario') break run\_game()
En la sección de recursos no me sale el código orinal y este curso que menciona donde se hizo ese código tampoco.
Añadí algunos detalles para que se vea mas cool ✨ ```js import time import random import questionary from colorama import Fore, Style, init init() user_wins = 0; pc_wins = 0 print(Fore.YELLOW + "=== Bienvenido al juego Piedra, Papel o tijera 🚀 ===" + Style.RESET_ALL) def select_option(): choices = ("Piedra", "Papel", "Tijeras") user_option = questionary.select( "Elige una opción: ", choices, pointer='👉' ).ask() pc_option = random.choice(choices); return user_option, pc_option def exit_option(): return questionary.confirm("Desea jugar otra partida?").ask() def write_fx(frase): for letra in frase: print(letra, end='', flush=True) time.sleep(0.010) def check_rule(user, pc): global user_wins, pc_wins if user == pc: return f''' Resultado de la partida: {Fore.BLUE} Empate {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{pc} ''' if user == 'Piedra': if pc == 'Tijeras': user_wins += 1 return f''' Resultado de la partida: {Fore.BLUE} Usuario Gana {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{pc} ''' if user == 'Papel': if pc == 'Piedra': user_wins += 1 return f''' Resultado de la partida: {Fore.BLUE} Usuario Gana {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{pc} ''' else: pc_wins += 1 return f''' Resultado de la partida: {Fore.BLUE} PC Gana {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{pc} ''' if user == 'Tijeras': if pc == 'Papel': user_wins += 1 return f''' Resultado de la partida: {Fore.BLUE} Usuario Gana {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{pc} ''' else: pc_wins += 1 return f''' Resultado de la partida: {Fore.BLUE} PC Gana {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{pc} ''' def show_win(): if (user_wins == 2): print(Fore.GREEN +'\n === El ganador es el Usuario ===') return True if (pc_wins == 2): print(Fore.GREEN +"\n=== El ganador es el PC ===") return True return False def reset(): global user_wins, pc_wins user_wins = 0 pc_wins = 0 def main(): number_of_rounds = 1 while True: print(Fore.GREEN, f"\nRONDA #: {number_of_rounds} \n" + Style.BRIGHT) user_option, pc_option = select_option() result = check_rule(user_option, pc_option) write_fx(result) number_of_rounds += 1 if show_win(): if not exit_option(): break else: reset() number_of_rounds = 1 if __name__ == '__main__': main() ```import timeimport random import questionaryfrom colorama import Fore, Style, init init() user\_wins = 0;pc\_wins = 0print(Fore.YELLOW + "=== Bienvenido al juego Piedra, Papel o tijera 🚀 ===" + Style.RESET\_ALL) def select\_option():    choices = ("Piedra", "Papel", "Tijeras")    user\_option = questionary.select(        "Elige una opción: ",        choices,        *pointer*='👉'    ).ask()        pc\_option = random.choice(choices);    return user\_option, pc\_option def exit\_option():    return questionary.confirm("Desea jugar otra partida?").ask()        def write\_fx(*frase*):    for letra in *frase*:        print(letra, *end*='', *flush*=True)        time.sleep(0.010) def check\_rule(*user*, *pc*):    global user\_wins, pc\_wins        if *user* == *pc*:         return f'''             Resultado de la partida: {Fore.BLUE} Empate            {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{*pc*}        '''    if *user* == 'Piedra':        if *pc* == 'Tijeras':            user\_wins += 1            return f'''                Resultado de la partida: {Fore.BLUE} Usuario Gana                {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{*pc*}            '''    if *user* == 'Papel':        if *pc* == 'Piedra':            user\_wins += 1            return f'''                Resultado de la partida: {Fore.BLUE} Usuario Gana                {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{*pc*}            '''        else:            pc\_wins += 1            return f'''                Resultado de la partida: {Fore.BLUE} PC Gana                {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{*pc*}            '''    if *user* == 'Tijeras':        if *pc* == 'Papel':            user\_wins += 1            return f'''                Resultado de la partida: {Fore.BLUE} Usuario Gana                {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{*pc*}            '''        else:            pc\_wins += 1            return f'''                Resultado de la partida: {Fore.BLUE} PC Gana                {Fore.WHITE}La seleccion de la maquina fue: {Fore.RED}{*pc*}            '''            def show\_win():    if (user\_wins == 2):        print(Fore.GREEN +'\n === El ganador es el Usuario ===')        return True        if (pc\_wins == 2):        print(Fore.GREEN +"\n=== El ganador es el PC ===")        return True        return False def reset():    global user\_wins, pc\_wins    user\_wins = 0    pc\_wins = 0    def main():    number\_of\_rounds = 1        while True:                print(Fore.GREEN, f"\nRONDA #: {number\_of\_rounds} \n" + Style.BRIGHT)        user\_option, pc\_option = select\_option()                        result = check\_rule(user\_option, pc\_option)        write\_fx(result)                number\_of\_rounds += 1                if show\_win():            if not exit\_option():                break            else:                 reset()                number\_of\_rounds = 1                                         if \_\_name\_\_ == '\_\_main\_\_':    main()
Implemente algo de Art ASCII y agregue algunas otras validaciones para finalizar el juego y contar el número de rondas jugadas. Les comparto mi código: ```python from cgi import print_arguments import random from os import system, name hands = [ """ _______ ---' ____) (_____) (_____) (____) ---.__(___) """, """ _______ ---' ____)_____ ______) _______) _______) ---.__________) """, """ _______ ---' ____)____ ______) __________) (____) ---.__(___) """ ] options = ['piedra', 'papel', 'tijera'] def clearConsole(): if name == "nt": system("cls") else: system("clear") def choose_options(): user_option = int(input('Seleccione una opción 1-Piedra, 2-Papel, 3-Tijera: ')) computer_option = random.choice(options) assert user_option != int, "Solo se permiten los números 1, 2 o 3" if user_option > 3 or user_option < 1: print('Esa opción no es válida') condition = True while condition: user_option = int(input('Seleccione una opción 1-Piedra, 2-Papel, 3-Tijera: ')) if user_option < 4 and user_option >= 1: condition = False clearConsole() return user_option, computer_option def check_rules(user_option, computer_option, user_wins, computer_wins): if ((options[user_option-1] == 'piedra' and computer_option == 'tijera') or (options[user_option-1] == 'papel' and computer_option == 'piedra') or (options[user_option-1] == 'tijera' and computer_option == 'papel')): print(f"Usted eligió: {hands[user_option-1]} - la computador eligió: {computer_option}") print('Usted ganó!') print('-'*20) user_wins += 1 elif(options[user_option-1] == computer_option): print(f"Usted eligió: {hands[user_option-1]} - la computador eligió: {computer_option}") print('Empate') print('-'*20) else: print(f"Usted eligió: {hands[user_option-1]} - la computador eligió: {computer_option}") print('Usted perdió') print('-'*20) computer_wins += 1 return user_wins, computer_wins def run_game(): computer_wins = 0 user_wins = 0 rounds = 0 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) user_option, computer_option = choose_options() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins) rounds += 1 if computer_wins == 3: print('La computadora ha ganado, Intenta nuevamente') break if user_wins == 3: print('BOOOO HAS GANADOOOOO. FELICITACIONES') break if __name__ == '__main__': run_game() ```
De acuerdo con algunos otros classmates, este video fue algo confuso. Debí realizarlo por mi propia cuenta. Les dejo mi aporte: ```js ## Piedra papel tijera import random def options(): option = ['piedra', 'papel', 'tijera'] player1 = (input('Hola Jugador, selecciona tu elemento: piedra, papel o tijera: ')).lower() if not player1 in option: print('No has seleccionado una opcion correcta.\n') #continue return None,None player2 = random.choice(option) print(f'\nHas seleccionado: {player1}\n') print(f'La computadora ha seleccionado: {player2}\n') return player1,player2 def rules(player1,player2,contador1,contador2): if (player1==player2 and player1!=None): print('Es un empate, selecionaste la misma opcion de la computadora.\n') elif((player1=='piedra' and player2 == 'papel') or (player1=='papel' and player2 == 'tijera') or (player1=='tijera' and player2 == 'piedra')): print('Perdiste esta partida.\n') contador2+=1 elif((player1=='papel' and player2 == 'piedra') or (player1=='tijera' and player2 == 'papel') or (player1=='piedra' and player2 == 'tijera')): print('Ganaste esta partida.\n') contador1+=1 return contador1,contador2 def resume(player1,player2,contador1,contador2): while True: player1,player2 = options() contador1,contador2= rules(player1,player2,contador1,contador2) if contador1==2: print('Has ganado el juego\n') print (f'Tus puntos = {contador1}, Computadora = {contador2}') break if contador2==2: print('La computadora gana el juego\n') print (f'Tus puntos = {contador1}, Computadora = {contador2}') break def run_game(): contador1 = 0 contador2 = 0 player1,player2 = options() contador1,contador2= rules(player1,player2,contador1,contador2) resume(player1,player2,contador1,contador2) run_game() ```## Piedra papel tijera
Excelente clase, cuando iniciamos en el mundo laboral la mayor parte del tiempo refactorizamos proyectos ya construidos ya que iniciar un proyecto desde cero lleva mayor inversión y tiempo en ponerlo en produccion
Mi pequeño aporte he agregado algunos detalles y lo he modificado. ```python import random def choose_options(): options = ('piedra', 'papel', 'tijera') while True: user_option = input('piedra, papel o tijera => ').lower() if user_option not in options: print('Esa opción no es válida. Inténtalo de nuevo.') else: break computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option, computer_option def check_rules(user_option, computer_option, user_wins, computer_wins): if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('piedra gana a tijera') print('user gano!') user_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer_wins += 1 elif user_option == 'papel': if computer_option == 'piedra': print('papel gana a piedra') print('user gano') user_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer_wins += 1 elif user_option == 'tijera': if computer_option == 'papel': print('tijera gana a papel') print('user gano!') user_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer_wins += 1 return user_wins, computer_wins def check_winner(user_wins, computer_wins): if user_wins == 2: print('El ganador es el usuario') return True if computer_wins == 2: print('El ganador es la computadora') return True return False def run_game(): computer_wins=0 user_wins=0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) rounds += 1 user_option, computer_option = choose_options() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins) if check_winner(user_wins, computer_wins): break run_game() ```
Mi aporte:import random, os options = ('piedra', 'papel', 'tijera') def choose\_option():    user\_option = input('piedra, papel o tijera => ')    user\_option = user\_option.lower()     if not user\_option in options:      print('esa opcion no es valida')      return None, None     computer\_option = random.choice(options)     print('User option =>', user\_option)    print('Computer option =>', computer\_option)        return user\_option,computer\_option    def check\_rules(user\_option, computer\_option, user\_wins, computer\_wins):    if user\_option == computer\_option:        print('Empate!')    elif user\_option == 'piedra':        if computer\_option == 'tijera':            print('piedra gana a tijera')            print('user gano!')            user\_wins += 1        else:            print('Papel gana a piedra')            print('computer gano!')            computer\_wins += 1    elif user\_option == 'papel':        if computer\_option == 'piedra':            print('papel gana a piedra')            print('user gano')            user\_wins += 1        else:            print('tijera gana a papel')            print('computer gano!')            computer\_wins += 1    elif user\_option == 'tijera':        if computer\_option == 'papel':            print('tijera gana a papel')            print('user gano!')            user\_wins += 1        else:            print('piedra gana a tijera')            print('computer gano!')            computer\_wins += 1        return user\_wins, computer\_wins def validate\_winer(user\_wins, computer\_wins):    if user\_wins == 2 and computer\_wins == 2:        print('Van empate!!')    else:         if computer\_wins == 2:            print('El ganador es la computadora')        if user\_wins == 2:            print('El ganador es el usuario')         def main():    computer\_wins = 0    user\_wins = 0          rounds = 1        while True:         print('\*' \* 10)        print('ROUND', rounds)        print('\*' \* 10)         print('computer\_wins', computer\_wins)        print('user\_wins', user\_wins)         rounds += 1                user\_option, computer\_option = choose\_option()                user\_wins, computer\_wins = check\_rules(user\_option, computer\_option, user\_wins, computer\_wins)                validate\_winer(user\_wins, computer\_wins)                input("Presiona una tecla para continuar")        os.system('cls') main()            ```js import random, os options = ('piedra', 'papel', 'tijera') def choose_option(): user_option = input('piedra, papel o tijera => ') user_option = user_option.lower() if not user_option in options: print('esa opcion no es valida') return None, None computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option,computer_option def check_rules(user_option, computer_option, user_wins, computer_wins): if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('piedra gana a tijera') print('user gano!') user_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer_wins += 1 elif user_option == 'papel': if computer_option == 'piedra': print('papel gana a piedra') print('user gano') user_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer_wins += 1 elif user_option == 'tijera': if computer_option == 'papel': print('tijera gana a papel') print('user gano!') user_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer_wins += 1 return user_wins, computer_wins def validate_winer(user_wins, computer_wins): if user_wins == 2 and computer_wins == 2: print('Van empate!!') else: if computer_wins == 2: print('El ganador es la computadora') if user_wins == 2: print('El ganador es el usuario') def main(): computer_wins = 0 user_wins = 0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) rounds += 1 user_option, computer_option = choose_option() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins) validate_winer(user_wins, computer_wins) input("Presiona una tecla para continuar") os.system('cls') main() ```
mi proyecto ![](https://static.platzi.com/media/user_upload/image-67c57bcb-5831-438d-8683-9c1983fa73f2.jpg)
creado con IA: import random \# Definimos las opciones opciones = \["piedra", "papel", "tijera"] def obtener\_eleccion\_jugador(): """Función para obtener la elección del jugador""" eleccion = input("Elige: piedra, papel o tijera: ").lower() while eleccion not in opciones: print("Opción no válida. Intenta de nuevo.") eleccion = input("Elige: piedra, papel o tijera: ").lower() return eleccion def obtener\_eleccion\_computadora(): """Función para obtener la elección de la computadora""" return random.choice(opciones) def determinar\_ganador(jugador, computadora): """Función para determinar el ganador""" if jugador == computadora: return "Empate" elif (jugador == "piedra" and computadora == "tijera") or \\ (jugador == "papel" and computadora == "piedra") or \\ (jugador == "tijera" and computadora == "papel"): return "Ganaste" else: return "Perdiste" def jugar(): """Función principal del juego""" jugador = obtener\_eleccion\_jugador() computadora = obtener\_eleccion\_computadora() print(f"Tú elegiste: {jugador}") print(f"La computadora eligió: {computadora}") resultado = determinar\_ganador(jugador, computadora) print(resultado) \# Ejecutamos el juego if \_\_name\_\_ == "\_\_main\_\_": jugar()
![](https://static.platzi.com/media/user_upload/imagen-8fd89592-282d-4e65-9521-f37c9c99cf53.jpg)
Animo, siempre será mejor empezar un código desde cero, porque sabes que hace cada linea de código, sin embargo en la realidad no es así, nos toca entender códigos que hacen otras personas y optimizarlo. Esto nos permite aprender formas de trabajo y métodos que quizás no conozcamos.
Estoy siguiendo la ruta "Python de cero a experto" porque estoy aprendiendo desde cero, el primer curso que lleve fue con Carli y volé mucho, me quedaban muchas dudas pero ella nos ponía retos, y ahí se aprendía, con este segundo curso me gustaría que igual el profesor planteara pequeños retos, pero lo bueno es que el si explica bien cada cosita, aunque en esta clase si fue un poco complicado seguirle el hilo, y creo q no se corrigió el hecho de que cuando pones una opción no valida tambien dice "Empate" 😅 o solo me pasa a mi? 😅
Estuve buscando el curso al que te refieres, donde el proyecto consiste en crear el juego de **piedra, papel o tijera,** pero no lo encontré. Además, he notado que en ese curso utilizan condicionales y condicionales anidados, conceptos que aún no hemos visto en esta clase, ni tampoco hemos abordado la estructura **while**. **¿Qué curso me recomendarías tomar antes de continuar con esta clase de Refactor Game?**
```js import random rounds = 1 def choose_options():# Función que define las desiciones de los jugadores, la computadora usa un random! es aleatoria la decision de ella. options = ('piedra', 'papel', 'tijera') user_option = input('piedra, papel o tijera => ') user_option = user_option.lower() if not user_option in options: print('esa opcion no es valida') return None,None computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option, computer_option def check_rules (user_option, computer_option,user_wins, computer_wins): # Esta es la función de las reglas de juego, aqui se define quien es win y el perdedor. if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('piedra gana a tijera') print('user gano!') user_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer_wins += 1 elif user_option == 'papel': if computer_option == 'piedra': print('papel gana a piedra') print('user gano') user_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer_wins += 1 elif user_option == 'tijera': if computer_option == 'papel': print('tijera gana a papel') print('user gano!') user_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer_wins += 1 return user_wins, computer_wins def check_winner(user_wins, computer_wins): # La función que me define quien sera el ganador! if computer_wins == 2: print('El ganador es la computadora') return 'computer' if user_wins == 2: print('El ganador es el usuario') return 'user' return None def run_game():#Esta es la función principal computer_wins = 0 user_wins = 0 rounds=1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) rounds += 1 user_option, computer_option= choose_options() if user_option is None: continue user_wins, computer_wins = check_rules (user_option, computer_option, user_wins, computer_wins) winner= check_winner(user_wins, computer_wins) if winner: break # Inicial el juevo run_game() ```
Este es mi código adaptado, es un poco diferente porque mi código base era diferente al de la clase: ```python import random as rd print('Este es el juego de piedra, papel o tijera.'); game_options = ('piedra', 'papel', 'tijera'); user_option = str computer_option = str def user_choice(): user_selects = input('Elige piedra, papel o tijera: ').lower(); computer_selects = rd.choice(game_options) if user_selects in game_options: print(f'Has escogido {user_selects}') print(f'La computadora ha escogido {computer_selects}') else: print('Esa opción no es valida, escoge de nuevo (tienes 2 oportunidades más).') i = 0 while i < 2: i += 1 user_selects = input('Elige piedra, papel o tijera: ').lower(); if user_option in game_options: break else: user_selects = '' return user_selects, computer_selects # user_option = user_choice() def Juego(): rondas = 0 user_victories = 0 computer_victories = 0 while True: rondas += 1 print('*' * 12) print(f'Ronda {rondas}') print('*' * 12) user_option, computer_option = user_choice() if user_option == '': print('Gracias por jugar.') break else: if user_option == computer_option: print('Esto es un empate, seleccionaron la misma opcion'); print('*' * 12) print(f'El marcador es {user_victories} punto(s) a favor del usario y {computer_victories} punto(s) a favor de la compu.') elif user_option == 'piedra': if computer_option == 'tijera': print('Piedra gana a tijera'); print('El o la usuario ha ganado.'); user_victories += 1; print('*' * 12) print(f'El marcador es {user_victories} punto(s) a favor del usario y {computer_victories} punto(s) a favor de la compu.') else: print('Papel gana a piedra'); print('La computadora ha ganado.'); computer_victories += 1; print('*' * 12) print(f'El marcador es {user_victories} punto(s) a favor del usario y {computer_victories} punto(s) a favor de la compu.') elif user_option == 'papel': if computer_option == 'tijera': print('Tijera gana a papel'); print('La computadora ha ganado.'); computer_victories += 1; print('*' * 12) print(f'El marcador es {user_victories} punto(s) a favor del usario y {computer_victories} punto(s) a favor de la compu.') else: print('Papel gana a piedra'); print('El o la usuario ha ganado.'); user_victories += 1; print('*' * 12) print(f'El marcador es {user_victories} punto(s) a favor del usario y {computer_victories} punto(s) a favor de la compu.') elif user_option == 'tijera': if computer_option == 'papel': print('Tijera gana a papel'); print('El o la usuario ha ganado.'); user_victories += 1; print('*' * 12) print(f'El marcador es {user_victories} punto(s) a favor del usario y {computer_victories} punto(s) a favor de la compu.') else: print('Piedra gana a tijera'); print('La computadora ha ganado.'); computer_victories += 1; print('*' * 12) print(f'El marcador es {user_victories} punto(s) a favor del usario y {computer_victories} punto(s) a favor de la compu.') if user_victories == 2: print('Una maravillosa vicotria de la o el usuario.'); break if computer_victories == 2: print('Una maravillosa vicotria de la compu.'); break Juego() ```
Cordial saludo Tutor y Compañeros. La siguiente es para compartir con ustedes mi codigo en base al que se modificó. ```js import random class Game: def __init__(self): self.Data = ['rock', 'paper', 'scissors'] self.player_score = 0 self.computer_score = 0 self.round_count = 1 def validation(self): one_player = input('Introducing you selected: ').lower() if one_player not in self.Data: print('Invalid input. Please try again.') return self.validation() return one_player def War(self): while self.round_count <= 3: print(f'Round {self.round_count}') player_choice = self.validation() computer_choice = random.choice(self.Data) if player_choice == computer_choice: print("Drawing") elif (player_choice == 'rock' and computer_choice == 'scissors') or \ (player_choice == 'scissors' and computer_choice == 'paper') or \ (player_choice == 'paper' and computer_choice == 'rock'): print('You win this round!') self.player_score += 1 else: self.computer_score += 1 print('Computer wins this round!') self.round_count += 1 self.Victory() def Victory(self): if self.player_score > self.computer_score: print('Congratulations! You won the game!') else: print('Computer won the game!') starting = Game() starting.War() ```
```js def display_title(): print(" JUEGO DE PIEDRA, PAPEL O TIJERA") print("--------------------------------------------\n") def get_player_choice(player): while True: print(f"\nTurno de {player}:") print('''Elige una opción: 1. Piedra 2. Papel 3. Tijera''') try: option = int(input("Introduce el número de tu elección: ")) if option in [1, 2, 3]: return convert_choice_to_string(option) else: print("Opción no válida. Por favor, elige 1, 2 o 3.") except ValueError: print("Entrada no válida. Por favor, introduce un número.") def convert_choice_to_string(option): options = {1: "Piedra", 2: "Papel", 3: "Tijera"} return options[option] def evaluate_choices(player1_choice, player2_choice): outcomes = { ("Piedra", "Tijera"): "Piedra aplasta Tijera. Jugador 1 gana!", ("Tijera", "Papel"): "Tijera corta Papel. Jugador 1 gana!", ("Papel", "Piedra"): "Papel envuelve Piedra. Jugador 1 gana!", ("Tijera", "Piedra"): "Piedra aplasta Tijera. Jugador 2 gana!", ("Papel", "Tijera"): "Tijera corta Papel. Jugador 2 gana!", ("Piedra", "Papel"): "Papel envuelve Piedra. Jugador 2 gana!", } if player1_choice == player2_choice: return "¡Es un empate!" return outcomes[(player1_choice, player2_choice)] def play_game(): display_title() player1_choice = get_player_choice("Jugador 1") player2_choice = get_player_choice("Jugador 2") print(f"\nJugador 1 eligió: {player1_choice}") print(f"Jugador 2 eligió: {player2_choice}\n") result = evaluate_choices(player1_choice, player2_choice) print(result) if __name__ == "__main__": play_game() ```def display\_title():    print("          JUEGO DE PIEDRA, PAPEL O TIJERA")    print("--------------------------------------------\n") def get\_player\_choice(player):    while True:        print(f"\nTurno de {player}:")        print('''Elige una opción:        1. Piedra        2. Papel        3. Tijera''')                try:            option = int(input("Introduce el número de tu elección: "))            if option in \[1, 2, 3]:                return convert\_choice\_to\_string(option)            else:                print("Opción no válida. Por favor, elige 1, 2 o 3.")        except ValueError:            print("Entrada no válida. Por favor, introduce un número.") def convert\_choice\_to\_string(option):    options = {1: "Piedra", 2: "Papel", 3: "Tijera"}    return options\[option] def evaluate\_choices(player1\_choice, player2\_choice):    outcomes = {        ("Piedra", "Tijera"): "Piedra aplasta Tijera. Jugador 1 gana!",        ("Tijera", "Papel"): "Tijera corta Papel. Jugador 1 gana!",        ("Papel", "Piedra"): "Papel envuelve Piedra. Jugador 1 gana!",        ("Tijera", "Piedra"): "Piedra aplasta Tijera. Jugador 2 gana!",        ("Papel", "Tijera"): "Tijera corta Papel. Jugador 2 gana!",        ("Piedra", "Papel"): "Papel envuelve Piedra. Jugador 2 gana!",    }        if player1\_choice == player2\_choice:        return "¡Es un empate!"        return outcomes\[(player1\_choice, player2\_choice)] def play\_game():    display\_title()        player1\_choice = get\_player\_choice("Jugador 1")    player2\_choice = get\_player\_choice("Jugador 2")        print(f"\nJugador 1 eligió: {player1\_choice}")    print(f"Jugador 2 eligió: {player2\_choice}\n")        result = evaluate\_choices(player1\_choice, player2\_choice)    print(result) if \_\_name\_\_ == "\_\_main\_\_":    play\_game()
Mi juego para dos usuarios:def display\_title():    print("          JUEGO DE PIEDRA, PAPEL O TIJERA")    print("--------------------------------------------\n") def get\_player\_choice(player):    while True:        print(f"\nTurno de {player}:")        print('''Elige una opción:        1. Piedra        2. Papel        3. Tijera''')                try:            option = int(input("Introduce el número de tu elección: "))            if option in \[1, 2, 3]:                return convert\_choice\_to\_string(option)            else:                print("Opción no válida. Por favor, elige 1, 2 o 3.")        except ValueError:            print("Entrada no válida. Por favor, introduce un número.") def convert\_choice\_to\_string(option):    options = {1: "Piedra", 2: "Papel", 3: "Tijera"}    return options\[option] def evaluate\_choices(player1\_choice, player2\_choice):    outcomes = {        ("Piedra", "Tijera"): "Piedra aplasta Tijera. Jugador 1 gana!",        ("Tijera", "Papel"): "Tijera corta Papel. Jugador 1 gana!",        ("Papel", "Piedra"): "Papel envuelve Piedra. Jugador 1 gana!",        ("Tijera", "Piedra"): "Piedra aplasta Tijera. Jugador 2 gana!",        ("Papel", "Tijera"): "Tijera corta Papel. Jugador 2 gana!",        ("Piedra", "Papel"): "Papel envuelve Piedra. Jugador 2 gana!",    }        if player1\_choice == player2\_choice:        return "¡Es un empate!"        return outcomes\[(player1\_choice, player2\_choice)] def play\_game():    display\_title()        player1\_choice = get\_player\_choice("Jugador 1")    player2\_choice = get\_player\_choice("Jugador 2")        print(f"\nJugador 1 eligió: {player1\_choice}")    print(f"Jugador 2 eligió: {player2\_choice}\n")        result = evaluate\_choices(player1\_choice, player2\_choice)    print(result) if \_\_name\_\_ == "\_\_main\_\_":    play\_game() ```js def display_title(): print(" JUEGO DE PIEDRA, PAPEL O TIJERA") print("--------------------------------------------\n") def get_player_choice(player): while True: print(f"\nTurno de {player}:") print('''Elige una opción: 1. Piedra 2. Papel 3. Tijera''') try: option = int(input("Introduce el número de tu elección: ")) if option in [1, 2, 3]: return convert_choice_to_string(option) else: print("Opción no válida. Por favor, elige 1, 2 o 3.") except ValueError: print("Entrada no válida. Por favor, introduce un número.") def convert_choice_to_string(option): options = {1: "Piedra", 2: "Papel", 3: "Tijera"} return options[option] def evaluate_choices(player1_choice, player2_choice): outcomes = { ("Piedra", "Tijera"): "Piedra aplasta Tijera. Jugador 1 gana!", ("Tijera", "Papel"): "Tijera corta Papel. Jugador 1 gana!", ("Papel", "Piedra"): "Papel envuelve Piedra. Jugador 1 gana!", ("Tijera", "Piedra"): "Piedra aplasta Tijera. Jugador 2 gana!", ("Papel", "Tijera"): "Tijera corta Papel. Jugador 2 gana!", ("Piedra", "Papel"): "Papel envuelve Piedra. Jugador 2 gana!", } if player1_choice == player2_choice: return "¡Es un empate!" return outcomes[(player1_choice, player2_choice)] def play_game(): display_title() player1_choice = get_player_choice("Jugador 1") player2_choice = get_player_choice("Jugador 2") print(f"\nJugador 1 eligió: {player1_choice}") print(f"Jugador 2 eligió: {player2_choice}\n") result = evaluate_choices(player1_choice, player2_choice) print(result) if __name__ == "__main__": play_game() ```
Mi juego para dos usuarios: def display\_title():    print("          JUEGO DE PIEDRA, PAPEL O TIJERA")    print("--------------------------------------------\n") def get\_player\_choice(player):    while True:        print(f"\nTurno de {player}:")        print('''Elige una opción:        1. Piedra        2. Papel        3. Tijera''')                try:            option = int(input("Introduce el número de tu elección: "))            if option in \[1, 2, 3]:                return convert\_choice\_to\_string(option)            else:                print("Opción no válida. Por favor, elige 1, 2 o 3.")        except ValueError:            print("Entrada no válida. Por favor, introduce un número.") def convert\_choice\_to\_string(option):    options = {1: "Piedra", 2: "Papel", 3: "Tijera"}    return options\[option] def evaluate\_choices(player1\_choice, player2\_choice):    outcomes = {        ("Piedra", "Tijera"): "Piedra aplasta Tijera. Jugador 1 gana!",        ("Tijera", "Papel"): "Tijera corta Papel. Jugador 1 gana!",        ("Papel", "Piedra"): "Papel envuelve Piedra. Jugador 1 gana!",        ("Tijera", "Piedra"): "Piedra aplasta Tijera. Jugador 2 gana!",        ("Papel", "Tijera"): "Tijera corta Papel. Jugador 2 gana!",        ("Piedra", "Papel"): "Papel envuelve Piedra. Jugador 2 gana!",    }        if player1\_choice == player2\_choice:        return "¡Es un empate!"        return outcomes\[(player1\_choice, player2\_choice)] def play\_game():    display\_title()        player1\_choice = get\_player\_choice("Jugador 1")    player2\_choice = get\_player\_choice("Jugador 2")        print(f"\nJugador 1 eligió: {player1\_choice}")    print(f"Jugador 2 eligió: {player2\_choice}\n")        result = evaluate\_choices(player1\_choice, player2\_choice)    print(result) if \_\_name\_\_ == "\_\_main\_\_":    play\_game()
```python import random def obtener_contrincante(): opciones = ['piedra', 'papel', 'tijera'] return random.choice(opciones) def obtener_ganador(jugador, contrincante): record = 0 if jugador == contrincante: return 'Empate', record elif jugador == 'piedra' and contrincante == 'tijera': return 'Ganaste', record + 1 elif jugador == 'papel' and contrincante == 'piedra': return 'Ganaste', record + 1 elif jugador == 'tijera' and contrincante == 'papel': return 'Ganaste', record + 1 else: return 'Perdiste', record def main(): puntaje = 0 record = 0 for i in range(3): while True: jugador = input('Elige piedra, papel o tijera: ') if jugador == 'piedra' or jugador == 'papel' or jugador == 'tijera': break else: print('Opción inválida, intenta de nuevo') contrincante = obtener_contrincante() print(f'El contrincante eligió: {contrincante}') resultado, record = obtener_ganador(jugador, contrincante) # los valores de retorno se guardan en resultado y record para ser usados en el print print(resultado) # el resultado se imprime en pantalla para que el jugador sepa si ganó o perdió puntaje += record # se suma el record al puntaje total del jugador para llevar un control de las victorias del jugador en la partida print(f'Tu puntaje final es: {puntaje}') main() ```import random def obtener\_contrincante():    opciones = \['piedra', 'papel', 'tijera']    return random.choice(opciones) def obtener\_ganador(jugador, contrincante):    record = 0    if jugador == contrincante:        return 'Empate', record    elif jugador == 'piedra' and contrincante == 'tijera':        return 'Ganaste', record + 1    elif jugador == 'papel' and contrincante == 'piedra':        return 'Ganaste', record + 1    elif jugador == 'tijera' and contrincante == 'papel':        return 'Ganaste', record + 1    else:        return 'Perdiste', record    def main():    puntaje = 0    record = 0     for i in range(3):        while True:            jugador = input('Elige piedra, papel o tijera: ')            if jugador == 'piedra' or jugador == 'papel' or jugador == 'tijera':                break            else:                print('Opción inválida, intenta de nuevo')         contrincante = obtener\_contrincante()        print(f'El contrincante eligió: {contrincante}')        resultado, record = obtener\_ganador(jugador, contrincante) *# los valores de retorno se guardan en resultado y record para ser usados en el print*        print(resultado) *# el resultado se imprime en pantalla para que el jugador sepa si ganó o perdió*        puntaje += record  *# se suma el record al puntaje total del jugador para llevar un control de las victorias del jugador en la partida*    print(f'Tu puntaje final es: {puntaje}') main()
hola aqui mi aporte de la opcion de ganar el juego: ```js import random options = ('piedra', 'papel', 'tijera') rounds = 1 computer_wins = 0 user_wins = 0 # Funcion para eleguir una opcion en el juego pierda papel o tijera def choose_options(): user_option = input('piedra, papel o tijera => ') user_option = user_option.lower() if not user_option in options: print('esa opcion no es valida') return None, None computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option, computer_option # Funcion que checa las reglas del juego def check_rules(user_option, computer_option, user_wins, computer_wins): if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('piedra gana a tijera') print('user gano!') user_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer_wins += 1 elif user_option == 'papel': if computer_option == 'piedra': print('papel gana a piedra') print('user gano') user_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer_wins += 1 elif user_option == 'tijera': if computer_option == 'papel': print('tijera gana a papel') print('user gano!') user_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer_wins += 1 return user_wins, computer_wins # Funcion que determina quien gano def winner(computer_wins, user_wins): if computer_wins == 2: print('El ganador es la computadora') return True elif user_wins == 2: print('El ganador es el usuario') return True return False while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) rounds += 1 user_option, computer_option = choose_options() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins) if winner(computer_wins, user_wins): break ```
Bueno con las funciones intente hacer el codigo mas corto pero me salio mas largo jajaja , dejo mi aporte: ´´´ `import` random `print('Vamos hacer la version 2 del juego papel, piedra y tijeras con funciones, gana quien consiga 3 victorias.')print('+' \* 20)` `rondas= 1Victorias\_Usuario = 0Victorias\_Computadora = 0` `def elegir\_opciones(): opciones = ('piedra', 'papel','tijera') usuario = input('Vamos a alegir la opciones para comenzar el juego, escribe la opcion que quieres elegir: Piedra / Papel / Tijera => ').lower().strip() computadora = random.choice(opciones)` ` print('El usuario eligio => ', usuario) print('El computador eligio => ', computadora)` ` if not usuario in opciones: return None, False` ` return usuario, computadora` `def ganaMaquina (): print('En esta ronda gana la computadora') global Victorias\_Computadora global rondas Victorias\_Computadora += 1 rondas += 1` `def ganaUsuario (): print('En esta ronda gana el usuario') global Victorias\_Usuario global rondas Victorias\_Usuario += 1 rondas += 1` `def verificacion(usuario,computadora): if usuario == computadora: print('Es un empate') global rondas rondas += 1` ` elif usuario == 'papel': if computadora == 'piedra': ganaUsuario() else: ganaMaquina()` ` elif usuario == 'piedra': if computadora == 'tijera': ganaUsuario() else: ganaMaquina() elif usuario == 'tijera': if computadora == 'papel': ganaUsuario() else: ganaMaquina() else: print('No elegiste una opcion permitida, elige de nuevo.')` `def ganador(Victorias\_Computadora,Victorias\_Usuario): if Victorias\_Computadora == 3 or Victorias\_Usuario == 3: print('+' \* 20) if Victorias\_Usuario == 3: print('Gana el Usuario con ',Victorias\_Usuario,' victorias') return True else: print('Gana la computadora con ',Victorias\_Computadora,' victorias') return True` `def Run\_Game(): while True:` ` print('+' \* 20) print('Ronda N°', rondas) print('Victorias de Usuario = ',Victorias\_Usuario,' / Victorias Computadora = ',Victorias\_Computadora) print('+' \* 10)` ` usuario, computadora = elegir\_opciones() verificacion(usuario, computadora) Fin = ganador(Victorias\_Computadora,Victorias\_Usuario) if Fin == True: break` `Run\_Game()` ´´´
No entiendo porque "computer\_option" y "user\_option" aparecen tanto en cuando se define la función chek\_rules y también cuando llama a la función posteriormente donde se la igual a "user\_wins" y "computer\_wins"

En lo personal me parece interesante ir trabajando un proyecto a lo largo del curso. Eso hace que se internalicen conceptos y temas principales de los que hemos ido viendo. Está bueno también hacer foco en cuál es la condición del proyecto, su estado y dejar en claro como continuaremos con el nombrando los temarios con los qiue lo vamos a trabajar. Es una buena guía para saber como guardar la información tomar nota y luego continuar con esto para volver a conectar con los conceptos. Pero me parece buena idea.

import os import random import time opciones = ('piedra', 'papel', 'tijera') derrotas = 0 victorias = 0 def clear\_screen(): os.system('clear') def win(): global victorias print('\n', opcion, ' gana a ', consola) print(' ¡Ganaste!') victorias += 1 time.sleep(2) clear\_screen() def lose(): global derrotas print('\n', opcion, ' pierde contra ', consola) print(' ¡Perdiste!') derrotas += 1 time.sleep(2) clear\_screen() def choice(): print('\nUsuario: ', opcion) print('Consola: ', consola) while derrotas < 3 and victorias < 3: print('MARCADOR:\n Usuario =>', victorias, 'Sistema =>', derrotas) print('¿Crees poder vencer a la consola?') usuario = input('¿Piedra, papel o tijera? => ') consola = random.choice(opciones) opcion = usuario.lower() if opcion not in opciones: print('\nNo estás eligiendo opciones válidas') time.sleep(2) clear\_screen() if opcion == consola: print('\n¡Empate!') choice() time.sleep(2) clear\_screen() elif opcion == 'piedra': if consola == 'tijera': choice() win() else: choice() lose() elif opcion == 'papel': if consola == 'piedra': choice() win() else: choice() lose() elif opcion == 'tijera': if consola == 'papel': choice() win() else: choice() lose() print('Juego terminado. Marcador final:\n Usuario =>', victorias, 'Sistema =>', derrotas)
Como programador, cuando vemos codigo ageno muchas veces no nos gusta, y es normal, porque fue algo realizado por otra persona, y no estamos acostumbrado a su manera de programar. por otro lado, el decir que es mejor empezar desde cero y coerrgir algo que ya esta hecho, a veces no es lo mejor primero, primero es perder tiempo en algo que ya esta resuelto, ahora entre sea mas grande el proyecto mas tiempo te tomara, asi que no es una opcion viable a mi pensar. por otro lado el trabajar con programacion funcional es super bueno, ayuda mucho a mantener un codigo legibe y escalable, a fin de cuentas lo que hizo el profe este video y unificar una series de pasos por decirlo asi en una funcion y sus valores se pasan por parametros, ejemplo: calculemos el factorial de un numero sin funcion: `numero = 5 resultado = 1 if numero == 0: resultado = 1 else: for i in range(1, numero + 1): resultado *= i print(f"El factorial de {numero} es {resultado}")` usando una funcion Claro, a continuación te muestro un ejemplo sencillo en Python para calcular el factorial de un número usando funciones y otro sin usar funciones. ### Usando Funciones ### `def factorial(n):` ` if n == 0:` ` return 1` ` else:` ` return n * factorial(n - 1)` `# Ejemplo de uso` `numero = 5` `resultado = factorial(numero)` `print(f"El factorial de {numero} es {resultado}")` ### es lo mismo, literal es hacer lo mismo pero pasando la informacion que necesitamos por medio de un parametro. la ventaja de la funcion es que podemos: * **Reutilización de Código.** * Modularidad**.** * Facilidad de Mantenimiento**.** * Legibilidad**.** mas ejemplos: `import math` `# Calcular área del círculo` `radio = 5` `area_circulo = math.pi * radio ** 2` `# Calcular área del rectángulo` `largo = 10` `ancho = 5` `area_rectangulo = largo * ancho` `# Calcular área del triángulo` `base = 8` `altura = 4` `area_triangulo = 0.5 * base * altura` `print("Área del círculo:", area_circulo)` `print("Área del rectángulo:", area_rectangulo)` `print("Área del triángulo:", area_triangulo)` con funcion `import math` `def area_circulo(radio):` ` return math.pi * radio ** 2` `def area_rectangulo(largo, ancho):` ` return largo * ancho` `def area_triangulo(base, altura):` ` return 0.5 * base * altura` `# Uso de funciones` `radio = 5` `largo = 10` `ancho = 5` `base = 8` `altura = 4` `print("Área del círculo:", area_circulo(radio))` `print("Área del rectángulo:", area_rectangulo(largo, ancho))` `print("Área del triángulo:", area_triangulo(base, altura))`
`Así es como yo lo hice:` ```js import random user_wins = 0 pc_wins = 0 ties = 0 round = 1 options = ("rock", "paper", "scissors") def choose_options(): user_option = input("Select rock, paper or scissors: ").lower() pc_option = random.choice(options) return user_option, pc_option def options_validation(user_option, pc_option): if user_option not in options: print("Insert a correct option") return False else: print(f"User option: {user_option}") print(f"Pc option: {pc_option}") return True def winner_verification(user_option, pc_option): global ties global user_wins global pc_wins if user_option == pc_option: print("-"*10) print("Tie") print("-"*10) ties += 1 elif (user_option == "rock" and pc_option == "paper") or \ (user_option == "scissors" and pc_option == "rock") or \ (user_option == "paper" and pc_option == "scissors"): print("-"*10) print('Pc won') print("-"*10) pc_wins += 1 elif (pc_option == "rock" and user_option == "paper") or \ (pc_option == "scissors" and user_option == "rock") or \ (pc_option == "paper" and user_option == "scissors"): print("-"*10) print('You won') print("-"*10) user_wins += 1 def run_game(): global round while user_wins < 2 and pc_wins < 2: print("**********") print(f"ROUND {round}") print("**********") user_option, pc_option = choose_options() if options_validation(user_option, pc_option): winner_verification(user_option, pc_option) print("User wins:", user_wins) print("Pc wins:", pc_wins) print("Ties:", ties) round += 1 run_game() if user_wins > pc_wins: print("YOU WON!") elif user_wins < pc_wins: print("YOU LOOSE!") ```
```python """************************************************* Juego: piedra, papel o tijera. Fecha: 22-06-2024 Autor: Erick Infante *************************************************""" print(""" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ /*/ Piedra, papel o tijera /*/ */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ """) import random def choose_options(): options = ("piedra", "papel", "tijera") computer_option = random.choice(options) user_option = input("Elija una opción (piedra, papel o tijera) => ").lower() if user_option not in options: print("\nEl valor ingresado no es correcto;\npor favor elija una opción correcta \ \n(Piedra, papel o tijera)\n") return None, None print(f"\nEl computador eligió: {computer_option}.") print(f"Tu elegiste: {user_option}.\n") return user_option, computer_option def check_rules(user_option, computer_option, user_wins, computer_wins): if user_option == computer_option: print("Empate...!!!\n") elif user_option == "piedra" and computer_option == "tijera" or \ user_option == "tijera" and computer_option == "papel" or \ user_option == "papel" and computer_option == "piedra": print(f"Has ganado...!!! {user_option.capitalize()} le gana a {computer_option}.\n") user_wins += 1 else: print(f"Perdiste...!!! {computer_option.capitalize()} le gana a {user_option}.\n") computer_wins +=1 return user_wins, computer_wins def run_game(): user_wins = 0 computer_wins = 0 rounds = 1 while user_wins <2 and computer_wins <2: print("*" * 20) print("ROUND # ", rounds,"\n") print("Computador:", computer_wins) print("usuario:", user_wins) print("*" * 20,"\n") rounds +=1 user_option, computer_option = choose_options() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins) if computer_wins == 2: print("LO SIENTO, EL COMPUTADOR HA GANADO...!!!\n") break if user_wins == 2: print("FELICITACIONES, LE HAS GANADO AL COMPUTADOR...!!!\n") break run_game() ```
```js """************************************************* Juego: piedra, papel o tijera. Fecha: 22-06-2024 Autor: Erick Infante *************************************************""" print(""" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ /*/ Piedra, papel o tijera /*/ */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ """) import random def choose_options(): options = ("piedra", "papel", "tijera") computer_option = random.choice(options) user_option = input("Elija una opción (piedra, papel o tijera) => ").lower() if user_option not in options: print("\nEl valor ingresado no es correcto;\npor favor elija una opción correcta \ \n(Piedra, papel o tijera)\n") return None, None print(f"\nEl computador eligió: {computer_option}.") print(f"Tu elegiste: {user_option}.\n") return user_option, computer_option def check_rules(user_option, computer_option, user_wins, computer_wins): if user_option == computer_option: print("Empate...!!!\n") elif user_option == "piedra" and computer_option == "tijera" or \ user_option == "tijera" and computer_option == "papel" or \ user_option == "papel" and computer_option == "piedra": print(f"Has ganado...!!! {user_option.capitalize()} le gana a {computer_option}.\n") user_wins += 1 else: print(f"Perdiste...!!! {computer_option.capitalize()} le gana a {user_option}.\n") computer_wins +=1 return user_wins, computer_wins def run_game(): user_wins = 0 computer_wins = 0 rounds = 1 while user_wins <2 and computer_wins <2: print("*" * 20) print("ROUND # ", rounds,"\n") print("Computador:", computer_wins) print("usuario:", user_wins) print("*" * 20,"\n") rounds +=1 user_option, computer_option = choose_options() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins) if computer_wins == 2: print("LO SIENTO, EL COMPUTADOR HA GANADO...!!!\n") break if user_wins == 2: print("FELICITACIONES, LE HAS GANADO AL COMPUTADOR...!!!\n") break run_game() ```"""\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*Juego: piedra, papel o tijera. Fecha: 22-06-2024Autor: Erick Infante\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*""" print("""\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*//\*/   Piedra, papel o tijera   /\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/\*/""") import random def choose\_options():    options = ("piedra", "papel", "tijera")    computer\_option = random.choice(options)    user\_option = input("Elija una opción (piedra, papel o tijera) => ").lower()     if user\_option not in options:        print("\nEl valor ingresado no es correcto;\npor favor elija una opción correcta \            \n(Piedra, papel o tijera)\n")        return None, None        print(f"\nEl computador eligió: {computer\_option}.")    print(f"Tu elegiste: {user\_option}.\n")    return user\_option, computer\_option def check\_rules(user\_option, computer\_option, user\_wins, computer\_wins):                if user\_option == computer\_option:            print("Empate...!!!\n")               elif user\_option == "piedra" and computer\_option == "tijera" or \            user\_option == "tijera" and computer\_option == "papel" or \            user\_option == "papel" and computer\_option == "piedra":            print(f"Has ganado...!!! {user\_option.capitalize()} le gana a {computer\_option}.\n")            user\_wins += 1               else:            print(f"Perdiste...!!! {computer\_option.capitalize()} le gana a {user\_option}.\n")                computer\_wins +=1               return user\_wins, computer\_wins def run\_game():     user\_wins = 0    computer\_wins = 0    rounds = 1     while user\_wins <2 and computer\_wins <2:                print("\*" \* 20)        print("ROUND # ", rounds,"\n")        print("Computador:", computer\_wins)        print("usuario:", user\_wins)                print("\*" \* 20,"\n")            rounds +=1         user\_option, computer\_option = choose\_options()        user\_wins, computer\_wins = check\_rules(user\_option, computer\_option, user\_wins, computer\_wins)         if computer\_wins == 2:            print("LO SIENTO, EL COMPUTADOR HA GANADO...!!!\n")            break        if user\_wins == 2:            print("FELICITACIONES, LE HAS GANADO AL COMPUTADOR...!!!\n")            break run\_game()
No me gustó esta clase....
```js import random as r regla = """El objetivo es vencer al oponente seleccionando el arma que gana, según las siguientes reglas:\nLa piedra aplasta la tijera. (Gana la piedra.)\nLa tijera corta el papel. (Gana la tijera.)\nEl papel envuelve la piedra. (Gana el papel.)\nEn caso de empate (que dos jugadores elijan el mismo elemento o que tres jugadores elijan cada uno un objeto distinto), se juega otra vez.""" #Encabezado print(10 * "*" + " Piedra, Papel o Tijera " + 10 * "*") def menu(x=0): while x != 3: print(10 * " " + " 1. Instrucciones") print(10 * " " + " 2. Jugar") print(10 * " " + " 3. Salir") x = input("¿Qué quieres hacer?\n") if x.isdigit(): x = int(x) if x == 1: print(regla) elif x == 2: log_juego(3,3) pass else: print("Opción no valida") def input_user_machine(): opciones = ("piedra", "papel", "tijera") machine = r.choice(opciones) user = input("Elige una opción: ") if user not in opciones: return None, None else: print(f"\nEl usuario ha seleccionado: {user}") print(f"La maquina ha seleccionado: {machine}\n") return user, machine def reglas_juego(user,machine): pi, pa, ti = ("piedra", "papel", "tijera") if user == machine and user is not None: print("Es empate") return 0,0 elif user == pi: if machine == ti: print("Haz ganado!") return 0,1 else: print("Lastima, ha ganado la máquina!") return 1,0 elif user == pa: if machine == pi: print("Haz ganado!") return 0,1 else: print("Lastima, ha ganado la máquina!") return 1,0 elif user == ti: if machine == pa: print("Haz ganado!") return 0,1 else: print("Lastima, ha ganado la máquina!") return 1,0 vidas_u = 3 vidas_m = 3 def log_juego(vidas_u, vidas_m): while True: if vidas_u > 0 and vidas_m > 0: user_op, machine_op = input_user_machine() if user_op is not None: res_us, res_ma = reglas_juego(user_op, machine_op) vidas_u -= res_us vidas_m -= res_ma print("\n"+10 * "*" + "Vidas restantes" + 10 * "*") print(f"Vidas User: {vidas_u}") print(f"Vidas Machine: {vidas_m}\n") else: print("Intenta de nuevo: ") elif vidas_m == 0: print("La ronda la gana el usuario\n") break elif vidas_u == 0: print("La ronda la gana la maquina\n") break menu() ```Les comparto mi codigo, estuve trabajando para que tenga un menu interactivo
se que la idea de la clase era enseñar cómo aplicar las funciones a un proyecto de la vida real, pero me da la impresión de que en este proyecto en específico no era necesario insertar funciones. Un objetivo de las funciones es no repetir código, pero no hay código repetido, y el hecho de señalar qué parte hace qué función se puede arreglar con comentarios
Les comparto mi código, observe que no se toco la validación en caso de error en la respuesta del usuario, asi que algo que aprendi en un curso de JAVA es que una funcion puede llamarse a si misma, lo intente en Python y tambien funciono! por lo que se repetirá hasta que el usuario introduzca una respuesta válida ```js import random def choose_option(): options = ('piedra', 'papel', 'tijera') user_option = input('piedra, papel o tijera => ') user_option = user_option.lower() if not user_option in options: print('esa opcion no es valida') return choose_option() # Se llama a la funcion de nuevo para que el usuario ingrese una opcion valida computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option, computer_option def check_rules(user_option,computer_option, user_wins, computer_wins): if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('piedra gana a tijera') print('user gano!') user_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer_wins += 1 elif user_option == 'papel': if computer_option == 'piedra': print('papel gana a piedra') print('user gano') user_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer_wins += 1 elif user_option == 'tijera': if computer_option == 'papel': print('tijera gana a papel') print('user gano!') user_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer_wins += 1 return user_wins, computer_wins def check_winner(user_wins, computer_wins): if computer_wins == 2: print('El ganador es la computadora') exit() if user_wins == 2: print('El ganador es el usuario') exit() def run_game(): computer_wins = 0 user_wins = 0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) rounds += 1 user_option, computer_option = choose_option() user_wins, computer_wins = check_rules(user_option,computer_option,user_wins,computer_wins) check_winner(user_wins, computer_wins) run_game() ```
Les comparto mi código, observe que no se toco la validación en caso de error en la respuesta del usuario, asi que algo que aprendi en un curso de JAVA es que una funcion puede llamarse a si misma, lo intente en Python y tambien funciono! por lo que se repetirá hasta que el usuario introduzca una respuesta válida ```js import random def choose_option(): options = ('piedra', 'papel', 'tijera') user_option = input('piedra, papel o tijera => ') user_option = user_option.lower() if not user_option in options: print('esa opcion no es valida') return choose_option() # Se llama a la funcion de nuevo para que el usuario ingrese una opcion valida computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option, computer_option def check_rules(user_option,computer_option, user_wins, computer_wins): if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('piedra gana a tijera') print('user gano!') user_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer_wins += 1 elif user_option == 'papel': if computer_option == 'piedra': print('papel gana a piedra') print('user gano') user_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer_wins += 1 elif user_option == 'tijera': if computer_option == 'papel': print('tijera gana a papel') print('user gano!') user_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer_wins += 1 return user_wins, computer_wins def check_winner(user_wins, computer_wins): if computer_wins == 2: print('El ganador es la computadora') exit() if user_wins == 2: print('El ganador es el usuario') exit() def run_game(): computer_wins = 0 user_wins = 0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) rounds += 1 user_option, computer_option = choose_option() user_wins, computer_wins = check_rules(user_option,computer_option,user_wins,computer_wins) check_winner(user_wins, computer_wins) run_game() ```import random def choose\_option(): options = ('piedra', 'papel', 'tijera') user\_option = input('piedra, papel o tijera => ') user\_option = user\_option.lower() if not user\_option in options: print('esa opcion no es valida') return choose\_option() # Se llama a la funcion de nuevo para que el usuario ingrese una opcion valida computer\_option = random.choice(options) print('User option =>', user\_option) print('Computer option =>', computer\_option) return user\_option, computer\_option def check\_rules(user\_option,computer\_option, user\_wins, computer\_wins): if user\_option == computer\_option: print('Empate!') elif user\_option == 'piedra': if computer\_option == 'tijera': print('piedra gana a tijera') print('user gano!') user\_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer\_wins += 1 elif user\_option == 'papel': if computer\_option == 'piedra': print('papel gana a piedra') print('user gano') user\_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer\_wins += 1 elif user\_option == 'tijera': if computer\_option == 'papel': print('tijera gana a papel') print('user gano!') user\_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer\_wins += 1 return user\_wins, computer\_wins def check\_winner(user\_wins, computer\_wins): if computer\_wins == 2: print('El ganador es la computadora') exit() if user\_wins == 2: print('El ganador es el usuario') exit() def run\_game(): computer\_wins = 0 user\_wins = 0 rounds = 1 while True: print('\*' \* 10) print('ROUND', rounds) print('\*' \* 10) print('computer\_wins', computer\_wins) print('user\_wins', user\_wins) rounds += 1 user\_option, computer\_option = choose\_option() user\_wins, computer\_wins = check\_rules(user\_option,computer\_option,user\_wins,computer\_wins) check\_winner(user\_wins, computer\_wins) run\_game()
Les comparto mi código, similar a mucho de uds pero vi que no se todo la validacion en caso de que se ingresara un dato fuera de la tupla 'papel' 'tijeras' 'piedra' Algo que aprendi en un curso de JAVA es que una funcion puede llamarse a si misma y lo probe en Python y tambien se pudo y sirve para repetirse hasta que exista una respuesta valida. ```js import random def choose_option(): options = ('piedra', 'papel', 'tijera') user_option = input('piedra, papel o tijera => ') user_option = user_option.lower() if not user_option in options: print('esa opcion no es valida') return choose_option() # Se llama a la funcion de nuevo para que el usuario ingrese una opcion valida computer_option = random.choice(options) print('User option =>', user_option) print('Computer option =>', computer_option) return user_option, computer_option def check_rules(user_option,computer_option, user_wins, computer_wins): if user_option == computer_option: print('Empate!') elif user_option == 'piedra': if computer_option == 'tijera': print('piedra gana a tijera') print('user gano!') user_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer_wins += 1 elif user_option == 'papel': if computer_option == 'piedra': print('papel gana a piedra') print('user gano') user_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer_wins += 1 elif user_option == 'tijera': if computer_option == 'papel': print('tijera gana a papel') print('user gano!') user_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer_wins += 1 return user_wins, computer_wins def check_winner(user_wins, computer_wins): if computer_wins == 2: print('El ganador es la computadora') exit() if user_wins == 2: print('El ganador es el usuario') exit() def run_game(): computer_wins = 0 user_wins = 0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('computer_wins', computer_wins) print('user_wins', user_wins) rounds += 1 user_option, computer_option = choose_option() user_wins, computer_wins = check_rules(user_option,computer_option,user_wins,computer_wins) check_winner(user_wins, computer_wins) run_game() ```import random def choose\_option(): options = ('piedra', 'papel', 'tijera') user\_option = input('piedra, papel o tijera => ') user\_option = user\_option.lower() if not user\_option in options: print('esa opcion no es valida') return choose\_option() # Se llama a la funcion de nuevo para que el usuario ingrese una opcion valida computer\_option = random.choice(options) print('User option =>', user\_option) print('Computer option =>', computer\_option) return user\_option, computer\_option def check\_rules(user\_option,computer\_option, user\_wins, computer\_wins): if user\_option == computer\_option: print('Empate!') elif user\_option == 'piedra': if computer\_option == 'tijera': print('piedra gana a tijera') print('user gano!') user\_wins += 1 else: print('Papel gana a piedra') print('computer gano!') computer\_wins += 1 elif user\_option == 'papel': if computer\_option == 'piedra': print('papel gana a piedra') print('user gano') user\_wins += 1 else: print('tijera gana a papel') print('computer gano!') computer\_wins += 1 elif user\_option == 'tijera': if computer\_option == 'papel': print('tijera gana a papel') print('user gano!') user\_wins += 1 else: print('piedra gana a tijera') print('computer gano!') computer\_wins += 1 return user\_wins, computer\_wins def check\_winner(user\_wins, computer\_wins): if computer\_wins == 2: print('El ganador es la computadora') exit() if user\_wins == 2: print('El ganador es el usuario') exit() def run\_game(): computer\_wins = 0 user\_wins = 0 rounds = 1 while True: print('\*' \* 10) print('ROUND', rounds) print('\*' \* 10) print('computer\_wins', computer\_wins) print('user\_wins', user\_wins) rounds += 1 user\_option, computer\_option = choose\_option() user\_wins, computer\_wins = check\_rules(user\_option,computer\_option,user\_wins,computer\_wins) check\_winner(user\_wins, computer\_wins) run\_game()
Como estamos hablando de que las funciones deben tener una responsabilidad, hice una función que actualizara el marcador y la invocaba donde antes aumentabamos el marcador. A continuación la función adicional que definí: def update\_marker(ganador): global computer\_wins global user\_wins if ganador == 'user': user\_wins += 1 else: computer\_wins += 1
Como estamos hablando de que las funciones deben tener una responsabilidad, hice una función que actualizara el marcador y la invocaba donde antes aumentabamos el marcador. A continuación mi solución import random computer\_wins = 0 user\_wins = 0 rounds = 1 def choose\_options(): options = ("piedra", "papel", "tijera") user\_option= input("Piedra, papel o tijera => ") user\_option = user\_option.lower() if not user\_option in options: print("esa opcion no es valida") \# continue return None, None computer\_option = random.choice(options) print("User option =>", user\_option) print("Computer option =>", computer\_option) return user\_option, computer\_option def check\_rules(user\_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!') update\_marker('user') else: print('Papel gana a piedra') print('computer gano!') update\_marker('computer') elif user\_option == 'papel': if computer\_option == 'piedra': print('papel gana a piedra') print('user gano') update\_marker('user') else: print('tijera gana a papel') print('computer gano!') update\_marker('computer') elif user\_option == 'tijera': if computer\_option == 'papel': print('tijera gana a papel') print('user gano!') update\_marker('user') else: print('piedra gana a tijera') print('computer gano!') update\_marker('computer') def update\_marker(ganador): global computer\_wins global user\_wins if ganador == 'user': user\_wins += 1 else: computer\_wins += 1 while True: print("Round ",rounds) print("x" \* 10) print("computer\_wins", computer\_wins) print("user\_wins", user\_wins) rounds += 1 user\_option, computer\_option = choose\_options() check\_rules(user\_option, computer\_option) if computer\_wins == 2: print('El ganador es la computadora') break if user\_wins == 2: print('El ganador es el usuario') break
Les dejo mi código: `import os, random` `os.system('cls')` `def choose_options():` ` options = ('piedra', 'papel', 'tijera')` ` user_option = input('Piedra, papel o tijera -> ')` ` user_option = user_option.lower()` ` if user_option not in options:` ` print('Esa opción no es válida')` ` # continue` ` return None, None` ` computer_option = random.choice(options)` ` print('User option ->', user_option)` ` print('Computer option ->', computer_option)` ` return user_option, computer_option` `def check_rules(user_option, computer_option, user_wins, computer_wins):` ` if user_option == computer_option:` ` print('¡Empate!')` ` elif user_option == 'piedra':` ` if computer_option == 'tijera':` ` print('Piedra le gana a tijera...')` ` print('¡Ganaste!')` ` user_wins += 1` ` else:` ` print('Papel le gana a piedra...')` ` print('¡Perdiste!')` ` computer_wins += 1` ` elif user_option == 'papel':` ` if computer_option == 'piedra':` ` print('Papel le gana a piedra...')` ` print('¡Ganaste!')` ` user_wins += 1` ` else:` ` print('Tijera le gana a papel...')` ` print('¡Perdiste!')` ` computer_wins += 1` ` elif user_option == 'tijera':` ` if computer_option == 'papel':` ` print('Tijera le gana a papel...')` ` print('¡Ganaste!')` ` user_wins += 1` ` else:` ` print('Piedra le gana a tijera...')` ` print('¡Perdiste!')` ` computer_wins += 1` ` return user_wins, computer_wins` `def check_winner(user_wins, computer_wins):` ` if user_wins == 2:` ` print('El usuario es el ganador definitivo.')` ` # break` ` return True` ` if computer_wins == 2:` ` print('El computador es el ganador definitivo.')` ` # break` ` return True` ` return False` `def run_game():` ` user_wins = 0` ` computer_wins = 0` ` rounds = 1` ` ` ` while True:` ` print('*' * 10)` ` print('ROUND', rounds)` ` print('*' * 10)` ` print('Computer Wins:', computer_wins)` ` print('User Wins:', user_wins)` ` rounds += 1` ` user_option, computer_option = choose_options()` ` user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins)` ` if check_winner(user_wins, computer_wins):` ` break` `run_game()`
Yo tengo una duda en el ejercicio de refactorizar el def check\_wins tuve que cambiar **break** por **exist()** para que el código corriera, ¿a qué se debe eso? solo lo hice porque vi a otros que lo realizaban en sus resoluciones: ![](https://static.platzi.com/media/user_upload/image-0dcd52d1-45bd-4383-aee2-7063ae7ef678.jpg)
rpositorio <https://github.com/angel20125/python-2-comprehension-functions-2024> ![](https://static.platzi.com/media/user_upload/clase-15-506904bc-3354-44bf-bd01-59de0b37c5cd.jpg)
repositorio <https://github.com/angel20125/python-2-comprehension-functions-2024> ![](https://static.platzi.com/media/user_upload/clase-14-scope-73b05e86-3574-4160-85c9-ee43dd021891.jpg)
Sería de mucha ayuda que en estas clases se muestre los atajos de teclado que va usando el profesor, eso tambien es muy importante aprender para ser mas eficiente
```js import random mano = { 'un': 'piedra', 'dos': 'papel', 'tres': 'tijera' } un = mano.get('un') dos = mano.get('dos') tres = mano.get('tres') juego = (f"{un}, {dos} o {tres}. ¡Un, dos, tres!") def choose_options(): options = (un, dos, tres) user_option = input(juego.title() + ' => ').lower() while user_option not in options: print('Esa opción no es válida') user_option = input(juego.title() + ' => ').lower() return None, None continue computer_option = random.choice(options) print(f'Elegiste {user_option}.') print(f'La computadora eligió {computer_option}.') return user_option, computer_option def check_rules(user_option, computer_option, user_wins, computer_wins, ties): if user_option == computer_option: print('Es un empate!'.capitalize()) ties += 1 elif (user_option == un and computer_option == dos) or (user_option == dos and computer_option == tres) or (user_option == tres and computer_option == un): print(f'{computer_option} gana a {user_option}.'.capitalize()) print('Perdiste! '.upper()) computer_wins += 1 elif (user_option == un and computer_option == tres) or (user_option == dos and computer_option == un) or (user_option == tres and computer_option == dos): print(f'{user_option} gana a {computer_option}.'.capitalize()) print('Ganaste! '.upper()) user_wins += 1 return user_wins, computer_wins def check_winner(user_wins, computer_wins, user_option, computer_option): if user_wins == 2: print(f'El ganador es {user_option.capitalize()}') return False if computer_wins == 2: print(f'El ganador es {computer_option.capitalize()}') return False def run_game(): user_wins = 0 computer_wins = 0 ties = 0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('user_wins', user_wins) print('computer_wins', computer_wins) user_option, computer_option = choose_options() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins, ties) result = check_winner(user_wins, computer_wins, user_option, computer_option) if result == False: break rounds += 1 run_game() ```Mi aporte! Muchas gracias por regresar a esto. Estuve refactorando por mi cuenta al final del curso anterior con lo que sabía hasta entonces e intentando otras cosas, por lo cual se volvió un poco más caótico refactorarlo en funciones. Aprendí más de todos los errores de la shell, que escribiendo las funciones. !
```js import random mano = { 'un': 'piedra', 'dos': 'papel', 'tres': 'tijera' } un = mano.get('un') dos = mano.get('dos') tres = mano.get('tres') juego = (f"{un}, {dos} o {tres}. ¡Un, dos, tres!") def choose_options(): options = (un, dos, tres) user_option = input(juego.title() + ' => ').lower() while user_option not in options: print('Esa opción no es válida') user_option = input(juego.title() + ' => ').lower() return None, None continue computer_option = random.choice(options) print(f'Elegiste {user_option}.') print(f'La computadora eligió {computer_option}.') return user_option, computer_option def check_rules(user_option, computer_option, user_wins, computer_wins, ties): if user_option == computer_option: print('Es un empate!'.capitalize()) ties += 1 elif (user_option == un and computer_option == dos) or (user_option == dos and computer_option == tres) or (user_option == tres and computer_option == un): print(f'{computer_option} gana a {user_option}.'.capitalize()) print('Perdiste! '.upper()) computer_wins += 1 elif (user_option == un and computer_option == tres) or (user_option == dos and computer_option == un) or (user_option == tres and computer_option == dos): print(f'{user_option} gana a {computer_option}.'.capitalize()) print('Ganaste! '.upper()) user_wins += 1 return user_wins, computer_wins def check_winner(user_wins, computer_wins, user_option, computer_option): if user_wins == 2: print(f'El ganador es {user_option.capitalize()}') return False if computer_wins == 2: print(f'El ganador es {computer_option.capitalize()}') return False def run_game(): user_wins = 0 computer_wins = 0 ties = 0 rounds = 1 while True: print('*' * 10) print('ROUND', rounds) print('*' * 10) print('user_wins', user_wins) print('computer_wins', computer_wins) user_option, computer_option = choose_options() user_wins, computer_wins = check_rules(user_option, computer_option, user_wins, computer_wins, ties) result = check_winner(user_wins, computer_wins, user_option, computer_option) if result == False: break rounds += 1 run_game() ```import random mano = { 'un': 'piedra', 'dos': 'papel', 'tres': 'tijera' } un = mano.get('un') dos = mano.get('dos') tres = mano.get('tres') juego = (f"{un}, {dos} o {tres}. ¡Un, dos, tres!") def choose\_options(): options = (un, dos, tres) user\_option = input(juego.title() + ' => ').lower() while user\_option not in options: print('Esa opción no es válida') user\_option = input(juego.title() + ' => ').lower() return None, None continue computer\_option = random.choice(options) print(f'Elegiste {user\_option}.') print(f'La computadora eligió {computer\_option}.') return user\_option, computer\_option def check\_rules(user\_option, computer\_option, user\_wins, computer\_wins, ties): if user\_option == computer\_option: print('Es un empate!'.capitalize()) ties += 1 elif (user\_option == un and computer\_option == dos) or (user\_option == dos and computer\_option == tres) or (user\_option == tres and computer\_option == un): print(f'{computer\_option} gana a {user\_option}.'.capitalize()) print('Perdiste! '.upper()) computer\_wins += 1 elif (user\_option == un and computer\_option == tres) or (user\_option == dos and computer\_option == un) or (user\_option == tres and computer\_option == dos): print(f'{user\_option} gana a {computer\_option}.'.capitalize()) print('Ganaste! '.upper()) user\_wins += 1 return user\_wins, computer\_wins def check\_winner(user\_wins, computer\_wins, user\_option, computer\_option): if user\_wins == 2: print(f'El ganador es {user\_option.capitalize()}') return False if computer\_wins == 2: print(f'El ganador es {computer\_option.capitalize()}') return False def run\_game(): user\_wins = 0 computer\_wins = 0 ties = 0 rounds = 1 while True: print('\*' \* 10) print('ROUND', rounds) print('\*' \* 10) print('user\_wins', user\_wins) print('computer\_wins', computer\_wins) user\_option, computer\_option = choose\_options() user\_wins, computer\_wins = check\_rules(user\_option, computer\_option, user\_wins, computer\_wins, ties) result = check\_winner(user\_wins, computer\_wins, user\_option, computer\_option) if result == False: break rounds += 1 run\_game()
Comparto mi refactorización con algunas adiciones. import random def features\_game(): print( "\*\*\*\*\*\*\*\*\*\*\*\*Bienvenido al juego de Piedra, Papel o Tijera\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*" ) nombre = input("Ingresar nombre del Jugador: ").capitalize() print(f"! Hola {'/'\*4} \*\*\*\*\*\*\*{nombre}\*\*\*\*\*\*\*\*{'/'\*4}") print("+" \* 37) return nombre def search\_options(): lista = \["Piedra", "Papel", "Tijera"] eleccion = input("Ingrese su eleccion: ") eleccion = eleccion.title() computadora = random.choice(lista) return eleccion, computadora def check\_rules(eleccion, computador, user\_wins, computer\_wins): if eleccion == computador: print("Empate") elif eleccion == "Piedra": if computador == "Papel": print("Papel gana a Piedra") print("Perdiste") computer\_wins += 1 else: print("Piedra gana a Tijera") print("Ganaste") user\_wins += 1 elif eleccion == "Papel": if computador == "Tijera": print("Tijera gana a Papel") print("Perdiste") computer\_wins += 1 else: print("Papel gana a Piedra") print("Ganaste") user\_wins += 1 elif eleccion == "Tijera": if computador == "Piedra": print("Piedra gana a Tijera") print("Perdiste") computer\_wins += 1 else: print("Tijera gana a Papel") print("Ganaste") user\_wins += 1 return user\_wins, computer\_wins def run\_game(): user\_wins = 0 computer\_wins = 0 rounds = 1 nombre = features\_game() while True: \#tablero tabulador del juego print('\*' \* 37) print('ROUND', rounds) print('\*' \* 37) print('computer\_wins', computer\_wins) print('user\_wins', user\_wins) eleccion, computador = search\_options() user\_wins, computer\_wins = check\_rules(eleccion, computador, user\_wins, computer\_wins) rounds += 1 if computer\_wins == 3: print(f'rounds ganado por la computadora: {computer\_wins}') print(f'puntaje final de computer es: / {computer\_wins} / {user\_wins} /') print('El ganador es la computadora') break if user\_wins == 3: print(f'rounds ganados por el usuario: {user\_wins}') print(f'puntaje final de {nombre} es:/ {user\_wins} / {computer\_wins}/') print(f'El ganador es {nombre}') break ![](https://static.platzi.com/media/user_upload/imagen-e60dc769-c548-430f-a0b8-a029ae921caa.jpg) run\_game()
**Ventajas de usar funciones (contra no usarlas):** 1. **Reutilización de código:** Las funciones permiten reutilizar el código. Si tienes un bloque de código que se utiliza en varios lugares, puedes ponerlo en una función y llamar a esa función en lugar de repetir el mismo código. 2. **Abstracción:** Las funciones proporcionan un nivel de abstracción que puede hacer que tu código sea más fácil de entender. En lugar de tener que entender todos los detalles de cómo se realiza una tarea, puedes llamar a una función que realiza esa tarea. 3. **Modularidad:** Las funciones permiten dividir un programa grande en partes más pequeñas y manejables. Esto puede hacer que el código sea más fácil de leer y de mantener. 4. **Espacio de nombres:** Cada función tiene su propio espacio de nombres, lo que significa que las variables definidas dentro de una función no interfieren con las variables del resto del programa. **Pruebas y depuración:** Las funciones pueden ser probadas y depuradas individualmente, lo que puede hacer que el proceso de encontrar y corregir errores sea más fácil.
```python import random def opcionCP(na): juego = ("piedra", "papel", "tijera") elije = f"{na}, por favor elige entre piedra, papel o tijera=> " aleat = random.choice(juego) jugad = input(elije) jugad = jugad.lower() return jugad, aleat def comparacionInv(a1, b2): comparacion3 = a1 == b2 comparacion2 = ( (a1 == "piedra" and b2 == "tijera") or (a1 == "papel" and b2 == "piedra") or (a1 == "tijera" and b2 == "papel") ) comparacion1 = ( (a1 == "piedra" and b2 == "papel") or (a1 == "papel" and b2 == "tijera") or (a1 == "tijera" and b2 == "piedra") ) return comparacion1, comparacion2, comparacion3 def mensajeContra(ju, al): mensajito = f"\nElejiste {ju} contra {al}\n" return mensajito def chetWiner(gan, per): vitde = f"\nNumero de victorias {gan} \nNumero de derrotas {per}" if per > gan: print(f"\nPerdiste las partida, lo siento {vitde}") elif per < gan: print(f"\n¡¡¡Ganaste!!! Felicidades {vitde}") else: print(f"\n¡¡¡Empataste!!! {vitde}") def chetPartida(pe, per, ga, gan, jugd, alert): mensajero = mensajeContra(jugd, alert) gar, ped, ep = comparacionInv(jugd, alert) if ep == True: print("empataste", mensajero) elif gar == True: pe += 1 per += 1 print("Lo siento, Perdiste", mensajero) elif ped == True: ga += 1 gan += 1 print("¡¡¡GANASTE!!!", mensajero) else: print("\nNo ingresaste ninguna opcion valida\n") return ga, gan, pe, per def run_game(): proceder = "si" ganar = 0 perder = 0 print("\n¡¡¡Bienvenido al Juego piedra, papel o tiejera!!!\n") name = input("Insera el nombre de usuario=> ") name = name.title() while proceder == "si": perde = 0 gana = 0 while perde < 2 and gana < 2: jugador1, aleatorio = opcionCP(name) print("\n", "*" * 9, "\n ROUND", (gana + perde) + 1, "\n", "*" * 9, "\n") gana, ganar, perde, perder = chetPartida( perde, perder, gana, ganar, jugador1, aleatorio ) anuncio = '¿Deseas continuar? ingresa la palabra \n "si" o "no"\n=>' proceder = input(anuncio) proceder = proceder.lower() chetWiner(ganar, perder) run_game() ```