No tienes acceso a esta clase

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

Refactor game

15/44
Recursos

Aportes 331

Preguntas 28

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.

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

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)

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

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()
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
*pensé que era el único que le costo bastante esta clase*

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()

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() ```
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
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() ```
yo lo hice de manera un poco mas diferente: ```python import random print(f"{"*" * 10} eliga una opcion {"*" * 10}") print(f"{"*" * 10} piedra, papel o tijera {"*" * 10}") options_game=["piedra","papel","tijera"] rounds=1 poinst_player=0 points_maquina=0 def game(option_maquina): global poinst_player global points_maquina global rounds print(f"round: {rounds}") option_player=input("eliga una opcion: ").lower() if (option_player == "tijera" and option_maquina == "piedra") or \ (option_player == "piedra" and option_maquina == "papel") or \ (option_player == "papel" and option_maquina == "tijera"): points_maquina += 1 print(f"Perdiste, maquina {points_maquina} vs jugador {poinst_player} {option_maquina}") elif option_player == option_maquina: print(f"empate: maquina {points_maquina} vs jugador {poinst_player} {option_maquina}") else: poinst_player += 1 print(f"Ganaste, maquina {points_maquina} vs jugador {poinst_player} {option_maquina}") rounds += 1 while True: option_maquina= random.choice(options_game) game(option_maquina) if poinst_player == 3: print(f"ganasteeeeeee¡ marcador final: maquina {points_maquina} jugador {poinst_player} ") break elif points_maquina == 3: print(f"perdisteeee¡ marcador final: maquina {points_maquina} jugador {poinst_player}") break ```import random print(f"{"\*" \* 10} eliga una opcion {"\*" \* 10}")print(f"{"\*" \* 10} piedra, papel o tijera {"\*" \* 10}") options\_game=\["piedra","papel","tijera"] rounds=1poinst\_player=0points\_maquina=0 def game(option\_maquina):    global poinst\_player    global points\_maquina    global rounds        print(f"round: {rounds}")    option\_player=input("eliga una opcion: ").lower()          if (option\_player == "tijera" and option\_maquina == "piedra") or \       (option\_player == "piedra" and option\_maquina == "papel") or \       (option\_player == "papel" and option\_maquina == "tijera"):        points\_maquina += 1        print(f"Perdiste, maquina {points\_maquina} vs jugador {poinst\_player} {option\_maquina}")    elif option\_player == option\_maquina:        print(f"empate: maquina {points\_maquina} vs jugador {poinst\_player} {option\_maquina}")    else:        poinst\_player += 1        print(f"Ganaste, maquina {points\_maquina} vs jugador {poinst\_player} {option\_maquina}")            rounds += 1            while True:    option\_maquina= random.choice(options\_game)    game(option\_maquina)    if poinst\_player == 3:        print(f"ganasteeeeeee¡ marcador final: maquina {points\_maquina} jugador {poinst\_player} ")        break    elif points\_maquina == 3:        print(f"perdisteeee¡ marcador final: maquina {points\_maquina} jugador {poinst\_player}")        break   
`import random` `print(f"{"*" * 10} eliga una opcion {"*" * 10}")print(f"{"*" * 10} piedra, papel o tijera {"*" * 10}")` `options_game=["piedra","papel","tijera"]` `rounds=1poinst_player=0points_maquina=0` `def game(option_maquina):    global poinst_player    global points_maquina    global rounds        print(f"round: {rounds}")    option_player=input("eliga una opcion: ").lower()          if (option_player == "tijera" and option_maquina == "piedra") or \       (option_player == "piedra" and option_maquina == "papel") or \       (option_player == "papel" and option_maquina == "tijera"):        points_maquina += 1        print(f"Perdiste, maquina {points_maquina} vs jugador {poinst_player} {option_maquina}")    elif option_player == option_maquina:        print(f"empate: maquina {points_maquina} vs jugador {poinst_player} {option_maquina}")    else:        poinst_player += 1        print(f"Ganaste, maquina {points_maquina} vs jugador {poinst_player} {option_maquina}")            rounds += 1            while True:    option_maquina= random.choice(options_game)    game(option_maquina)    if poinst_player == 3:        print(f"ganasteeeeeee¡ marcador final: maquina {points_maquina} jugador {poinst_player} ")        break    elif points_maquina == 3:        print(f"perdisteeee¡ marcador final: maquina {points_maquina} jugador {poinst_player}")        break    `
**Solucion un poco compacta en las condicionales** ```python import random def choose_options(): option = ('piedra','papel','tijera') user_option = input("piedra, papel o tijera => ").lower() computer_option = random.choice(option) if user_option not in option: print('esta opcion no existe!') #continue return None,None else: print("El Usuario eligió:", user_option) print("El computador eligió:", computer_option) return user_option, computer_option def check_options(user_option, computer_option, user_wins, computer_wins): if user_option == computer_option: print("Empate") elif (user_option == 'piedra' and computer_option == 'tijera') or \ (user_option == 'papel' and computer_option == 'piedra') or \ (user_option == 'tijera' and computer_option == 'papel'): print(user_option, "gana a", computer_option) print("Usuario gana") user_wins +=1 else: print(computer_option, "gana a", user_option) print("Computer gana") 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) user_option, computer_option = choose_options() user_wins,computer_wins = check_options(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() ```
```python 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) def chek_winner(user_wins, computer_wins): user_wins = 2 computer_wins = 2 if user_wins == 2: print('el ganador es el usuario') if computer_wins == 2: print('el ganador es la computadora') run_game() ```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) def chek\_winner(user\_wins, computer\_wins): user\_wins = 2 computer\_wins = 2 if user\_wins == 2: print('el ganador es el usuario') if computer\_wins == 2: print('el ganador es la computadora') run\_game()
Muy mal explicados el tema
Hola 👋🏽! les comparto mi versión del código del juego. En este se definieron funciones para determinar la validez de la entrada de la cantidad de rondas para ganar (para que solo se puedan ingresar valores numéricos) y para validar las selecciones del usuario según las opciones otorgas. En la escritura del código se implementaron listas, tuplas y diccionarios para aplicar conocimientos previos. Saludos! ```js import random options = ('piedra','papel','tijera') #Función para selección de alternativas y su verificación def choice(): user_choice = input('Ingrese su alternativa (piedra, papel o tijera): ') user_choice = user_choice.lower() computer_choice = random.choice(options) choices = {'player':user_choice, 'computer':computer_choice} if choices['player'] not in options: print('Por favor ingrese una alternativa válida.') choice_check = input('Ingrese su alternativa (piedra, papel o tijera): ') choice_check = choice_check.lower() while choice_check not in options: print('Por favor ingrese una alternativa válida.') choice_check = input('Ingrese su alternativa (piedra, papel o tijera): ') choice_check = choice_check.lower() else: check = {'player':choice_check,'computer':choices['computer']} return check else: return choices #Función para verificación de entrada válida de rondas def rounds(): while True: try: round = int(input('Ingrese la cantidad de partidas definidas para ganar 🏆: ')) return round except ValueError: print('Por favor ingre un valor numérico') #Función para definir al ganador en base a la cantidad de rondas ganadas def count_wins(): wins_user = [] wins_computer = [] count_rounds = 0 rounds_def = rounds() while len(wins_user) < rounds_def and len(wins_computer) < rounds_def: print('*'*20) print(f'RONDA {count_rounds + 1}') print('*'*20 ) choices = choice() if choices['player'] == choices['computer']: print(f'Es un empate! -> 🧑🏽:{choices["player"]} vs \ 🤖:{choices["computer"]}') count_rounds += 1 print('\n') elif choices['player'] == 'piedra' and choices['computer'] == 'tijera' or \ choices['player'] == 'papel' and choices['computer'] == 'piedra' or \ choices['player'] == 'tijera' and choices['computer'] == 'papel': print( f'Tu ganas! -> 🧑🏽:{choices["player"]} vs 🤖:{choices["computer"]}' ) wins_user.append(1) print(f'Tablero de puntaje -> 🧑🏽:{len(wins_user)} | 🤖:{len(wins_computer)} ') count_rounds += 1 print('\n') else: print( f'Tu pierdes! -> 🧑🏽:{choices["player"]} vs 🤖:{choices["computer"]}' ) wins_computer.append(1) print(f'Tablero de puntaje -> 🧑🏽:{len(wins_user)} | 🤖:{len(wins_computer)} ') count_rounds += 1 print('\n') else: if len(wins_user) == rounds_def: return f'Ganaste! tu tablero es: 🧑🏽->{len(wins_user)} | 🤖->{len(wins_computer)}' else: return f'Perdiste! tu tablero es: 🧑🏽->{len(wins_user)} | 🤖->{len(wins_computer)}' print(count_wins()) ```
![](https://static.platzi.com/media/user_upload/image-ecf7d55c-3c39-4580-ace9-bc6a2b55235c.jpg)
Les comparto mi código: ```js ```![](https://static.platzi.com/media/user_upload/image-79b9a81c-ee57-41fc-a6ac-cb6a2b949bec.jpg)
lo hiciste muy rapido , pero creo lo entendi...Lol
Esta es la forma en la que yo refactorice mi codigo :) espero les guste.import random # importamos la libreria randomimport os # importamos la libreria os pc\_points = 0user\_points = 0# establezco una funcion para limpiar los elementos en consoladef clear\_screen(): os.system("cls" if os.name == "nt" else "clear") \# funcion que se llama para mostrar las instruccionesdef instructions(): print("\*" \* 33) print("INSTRUCIONES") print("\*" \* 33) print("¿Piedra, Papel o Tijera?") print("\*" \* 33) print("\n") \# definimos esta funcion para el caso de derrotadef lose\_case(*user*): global pc\_points, user\_points # en este condicional verificamos primero si la opcion de usuario se corresponde con las permitidas, sino es asi sumamos 1 a la puntuacion rival if *user* not in'piedra' or *user* not in 'papel' or *user* not in 'tijera': print("Opcion invalida + 1 punto para pc") pc\_points += 1 print(f"Usuario: {user\_points} puntos!\nPC: {pc\_points} puntos!") else: print("Derrota!!") pc\_points += 1 print(f"Usuario: {user\_points} puntos!\nPC: {pc\_points} puntos!") # funcion para establecer las elecciones del usuario y la computadoradef element\_choice(*choice*): if *choice* == 'papel': return(0) elif *choice* == 'piedra': return(1) elif *choice* == 'tijera': return(2) elif *choice* == 0: return 'papel' elif *choice* == 1: return 'piedra' elif *choice* == 2: return 'tijera' # funcion que define las condiciones y logica del propio juegodef logica(): global pc\_points, user\_points compu = random.randint(0, 2) compu\_choice = element\_choice(compu) print("\*" \* 33) user = input("¿Cual es tu eleccion? => ").lower() print("\*" \* 33) print("\n") clear\_screen() print("\*" \* 33) print(f"Has elegido {user}") print(f"Pc ha elegido {compu\_choice}") print("\*" \* 33) print("\n") if element\_choice(user) == compu: print("Empate") print(f"Usuario: {user\_points} puntos!\nPC: {pc\_points} puntos!") elif element\_choice(user) == 0 and compu == 1: print("Victoria") user\_points += 1 print(f"Usuario: {user\_points} puntos!\nPC: {pc\_points} puntos!") elif element\_choice(user) == 1 and compu == 2: print("Victoria") user\_points += 1 print(f"Usuario: {user\_points} puntos!\nPC: {pc\_points} puntos!") elif element\_choice(user) == 2 and compu == 0: print("Victoria") user\_points += 1 print(f"Usuario: {user\_points} puntos!\nPC: {pc\_points} puntos!") else: lose\_case(user) # funcion main en la que configuramos el propio funcionamiento y flujo de ejecucion de las anteriores funcionesdef main(): global pc\_points, user\_points clear\_screen() ronda = 1 num\_partidas = int(input("¿Cuantas rondas quieres jugar? (Max: 8) => ")) if ronda > 8: print("Demasiadas rondas!\nNumero maximo de rondas 8") while ronda <= num\_partidas: instructions() print(f"Ronda {ronda}!!!") logica() input("Pulsa Enter para continuar...") clear\_screen() ronda += 1 print(f"Resultado final =>\nPC {pc\_points} puntos!\nUsuario {user\_points} puntos!") if pc\_points == user\_points: print("El resultado final es un empate!") elif user\_points > pc\_points: print("Enhorabuena! Has ganado :)") else: print("PC ha ganado! Derrota :(")main() Si encuentran algun error o mejora haganmelo saber! ```python import random # importamos la libreria random import os # importamos la libreria os pc_points = 0 user_points = 0 # establezco una funcion para limpiar los elementos en consola def clear_screen(): os.system("cls" if os.name == "nt" else "clear") # funcion que se llama para mostrar las instrucciones def instructions(): print("*" * 33) print("INSTRUCIONES") print("*" * 33) print("¿Piedra, Papel o Tijera?") print("*" * 33) print("\n") # definimos esta funcion para el caso de derrota def lose_case(user): global pc_points, user_points # en este condicional verificamos primero si la opcion de usuario se corresponde con las permitidas, sino es asi sumamos 1 a la puntuacion rival if user not in'piedra' or user not in 'papel' or user not in 'tijera': print("Opcion invalida + 1 punto para pc") pc_points += 1 print(f"Usuario: {user_points} puntos!\nPC: {pc_points} puntos!") else: print("Derrota!!") pc_points += 1 print(f"Usuario: {user_points} puntos!\nPC: {pc_points} puntos!") # funcion para establecer las elecciones del usuario y la computadora def element_choice(choice): if choice == 'papel': return(0) elif choice == 'piedra': return(1) elif choice == 'tijera': return(2) elif choice == 0: return 'papel' elif choice == 1: return 'piedra' elif choice == 2: return 'tijera' # funcion que define las condiciones y logica del propio juego def logica(): global pc_points, user_points compu = random.randint(0, 2) compu_choice = element_choice(compu) print("*" * 33) user = input("¿Cual es tu eleccion? => ").lower() print("*" * 33) print("\n") clear_screen() print("*" * 33) print(f"Has elegido {user}") print(f"Pc ha elegido {compu_choice}") print("*" * 33) print("\n") if element_choice(user) == compu: print("Empate") print(f"Usuario: {user_points} puntos!\nPC: {pc_points} puntos!") elif element_choice(user) == 0 and compu == 1: print("Victoria") user_points += 1 print(f"Usuario: {user_points} puntos!\nPC: {pc_points} puntos!") elif element_choice(user) == 1 and compu == 2: print("Victoria") user_points += 1 print(f"Usuario: {user_points} puntos!\nPC: {pc_points} puntos!") elif element_choice(user) == 2 and compu == 0: print("Victoria") user_points += 1 print(f"Usuario: {user_points} puntos!\nPC: {pc_points} puntos!") else: lose_case(user) # funcion main en la que configuramos el propio funcionamiento y flujo de ejecucion de las anteriores funciones def main(): global pc_points, user_points clear_screen() ronda = 1 num_partidas = int(input("¿Cuantas rondas quieres jugar? (Max: 8) => ")) if ronda > 8: print("Demasiadas rondas!\nNumero maximo de rondas 8") while ronda <= num_partidas: instructions() print(f"Ronda {ronda}!!!") logica() input("Pulsa Enter para continuar...") clear_screen() ronda += 1 print(f"Resultado final =>\nPC {pc_points} puntos!\nUsuario {user_points} puntos!") if pc_points == user_points: print("El resultado final es un empate!") elif user_points > pc_points: print("Enhorabuena! Has ganado :)") else: print("PC ha ganado! Derrota :(") main() ```
Se cambio un codigo largo y dificil de mantener por un codigo con funciones que es mas largo y dificil de mantener.