'punto' if max_score==1 else 'puntos'
#@title Juego de Cara y Cruz sin POO
import random
random.seed()
def coin_flip():
return random.choice(['cara', 'cruz'])
def play_game(num_players, num_rounds):
scores = [0] * num_players # inicializamos el vector de puntuaciones
for round in range(num_rounds): # para cada ronda
print(f"\nRonda {round + 1}:") # print ronda
for player in range(num_players): # para cada nº de jugador
result = coin_flip() # lanzamos la moneda
if result == 'cara': # si es cara
scores[player] += 1 # ganamos un punto
print(f"Jugador {player + 1}: {result}") # print jugador y resultado
print("\nResultados finales:")
for player in range(num_players): # para cada nº de jugador
print(f"Jugador {player + 1}: {scores[player]} puntos") # print jugador+puntos
# vector de ganadores
winners = [str(i + 1) for i, score in enumerate(scores) if score == max(scores)]
max_score = max(scores)
if len(winners) == 1:
print(f"\nEl jugador {winners[0]} gana con {max_score} puntos!")
else:
print(f"\nEmpate entre los jugadores {', '.join(winners[:-1])} y {winners[-1]} a {max_score} {'punto' if max_score==1 else 'puntos'}!")
if __name__ == "__main__":
# Configuración del juego
num_players = int(input("Ingrese el número de jugadores: "))
num_rounds = int(input("Ingrese el número de rondas: "))
# Jugar el juego
play_game(num_players, num_rounds)
Ingrese el número de jugadores: 10 Ingrese el número de rondas: 3 Ronda 1: Jugador 1: cara Jugador 2: cara Jugador 3: cara Jugador 4: cara Jugador 5: cara Jugador 6: cruz Jugador 7: cruz Jugador 8: cara Jugador 9: cara Jugador 10: cruz Ronda 2: Jugador 1: cruz Jugador 2: cara Jugador 3: cruz Jugador 4: cruz Jugador 5: cruz Jugador 6: cruz Jugador 7: cara Jugador 8: cruz Jugador 9: cruz Jugador 10: cruz Ronda 3: Jugador 1: cruz Jugador 2: cruz Jugador 3: cruz Jugador 4: cruz Jugador 5: cara Jugador 6: cruz Jugador 7: cara Jugador 8: cruz Jugador 9: cruz Jugador 10: cruz Resultados finales: Jugador 1: 1 puntos Jugador 2: 2 puntos Jugador 3: 1 puntos Jugador 4: 1 puntos Jugador 5: 2 puntos Jugador 6: 0 puntos Jugador 7: 2 puntos Jugador 8: 1 puntos Jugador 9: 1 puntos Jugador 10: 0 puntos Empate entre los jugadores 2, 5 y 7 a 2 puntos!
Player
encapsula la lógica de lanzar la moneda y llevar la cuenta de los puntos de cada jugador.Game
se encarga de la lógica del juego, incluyendo la creación de los jugadores, el control de las rondas y la determinación del ganador.self.jugadores = [Player(i+1) for i in range(num_jugadores)]
Se crea una lista con todos los objetos de los jugadores
#@title Juego de Cara y Cruz con POO
import random
class Player:
def __init__(self, id):
self.id = id # id: identificador númerico correlativo automático
self.puntos = 0 # inicializamos a cero los puntos del jugador
def __str__(self):
return f"~ Jugador {self.id}."
def lanzar_moneda(self):
return random.choice(['cara', 'cruz'])
def incrementar_puntos(self):
self.puntos += 1
class Game:
def __init__(self, num_jugadores, num_rondas):
self.jugadores = [Player(i+1) for i in range(num_jugadores)]
self.num_rondas = num_rondas
print("\nLista de jugadores")
for j in self.jugadores:
print(j)
def jugar(self):
for ronda in range(self.num_rondas):
print(f"\nRonda {ronda + 1}:")
for jugador in self.jugadores:
resultado = jugador.lanzar_moneda()
if resultado == 'cara':
jugador.incrementar_puntos()
print(f"Jugador {jugador.id}: {resultado}")
self.mostrar_resultados()
def mostrar_resultados(self):
print("\nResultados finales:")
for jugador in self.jugadores:
print(f"» Jugador {jugador.id}: {jugador.puntos} puntos")
max_puntos = max(jugador.puntos for jugador in self.jugadores)
ganadores = [str(j.id) for j in self.jugadores if j.puntos == max_puntos]
if len(ganadores) == 1:
print(f"\nEl jugador {', '.join(ganadores)} gana!")
else:
print(f"\nHay un empate entre los jugadores {', '.join(ganadores)}!")
if __name__ == "__main__":
# Configuración del juego
num_jugadores = int(input("Ingrese el número de jugadores: "))
num_rondas = int(input("Ingrese el número de rondas: "))
# Jugar el juego
game = Game(num_jugadores, num_rondas)
game.jugar()
Ingrese el número de jugadores: 3 Ingrese el número de rondas: 3 Lista de jugadores ~ Jugador 1. ~ Jugador 2. ~ Jugador 3. Ronda 1: Jugador 1: cara Jugador 2: cruz Jugador 3: cara Ronda 2: Jugador 1: cara Jugador 2: cara Jugador 3: cruz Ronda 3: Jugador 1: cara Jugador 2: cruz Jugador 3: cara Resultados finales: » Jugador 1: 3 puntos » Jugador 2: 1 puntos » Jugador 3: 2 puntos El jugador 1 gana!
import random
class Player:
def __init__(self, name):
self.name = name
self.score = 0
def __str__(self):
return self.name
def flip_coin(self):
result = random.choice(["heads", "tails"])
if result == "heads": # solo se obtiene punto si sale cara
self.score += 1
return True
return False
class Game:
def __init__(self, num_players, num_rounds):
self.array_players = [] # array de objetos jugador
self.num_rounds = num_rounds
for i in range(num_players):
name = chr(ord('A') + i) # uppercase letters of the alphabet
player = Player(name) # instanciamos un jugador
self.array_players.append(player)
def show_players(self): # el array_players pasa a ser una lista de letras
name_players = [str(player) for player in self.array_players]
return ", ".join(name_players)
def play(self):
print()
for round in range(self.num_rounds):
print(f"Round {round+1}, points for players: ", end="")
for player in self.array_players: # para cada jugador en el array
successful_player = player.flip_coin() # si es cara da True
if successful_player: # si salió cara
print(player, end=" ") # se imprime la letra
# sin el método __str__ habría que poner player.name
print()
self.show_ranking() # después de jugar todas las rondas: mostrar ranking
def show_ranking(self):
# ordenamos de mayor a menor puntuación el array de jugadores
self.array_players.sort(key=lambda player: player.score, reverse=True)
max_score = self.array_players[0].score
print("\n===== RANKING =====")
for player in self.array_players:
if player.score == max_score:
print(f"{player.name}: {player.score} points (winner)")
else:
print(f"{player.name}: {player.score} points")
if __name__ == "__main__":
num_players = int(input("Enter the number of players (2-26): "))
num_rounds = int(input("Enter the number of rounds: "))
game = Game(num_players, num_rounds)
print(f'Name of players: {game.show_players()}')
game.play()
Enter the number of players (2-26): 5 Enter the number of rounds: 4 Name of players: A, B, C, D, E Round 1, points for players: A B E Round 2, points for players: A C E Round 3, points for players: A C E Round 4, points for players: B C ===== RANKING ===== A: 3 points (winner) C: 3 points (winner) E: 3 points (winner) B: 2 points D: 0 points