Programar en Python, con programación orientada a objetos, un juego sencillo con las siguientes reglas:
Tecleando el nombre de los jugadores.
import random
class Jugador:
def __init__(self, nombre):
self.nombre = nombre
self.puntuacion = 0 # se inicializa la puntuación en cero
def lanzar_dado(self):
self.puntuacion = random.randint(1, 6)
def __str__(self):
return f"{self.nombre} → {self.puntuacion}"
def jugar():
num_jugadores = int(input("Ingrese el número de jugadores (entre 2 y 26): "))
while num_jugadores < 2 or num_jugadores > 26:
num_jugadores = int(input("Número inválido. Ingrese el número de jugadores (entre 2 y 26): "))
jugadores = [] # inicializamos la lista de jugadores como objetos
for i in range(num_jugadores):
nombre = input(f"Ingrese el nombre del jugador {i+1}: ")
jugadores.append(Jugador(nombre))
for jugador in jugadores:
jugador.lanzar_dado()
max_puntuacion = max(jugador.puntuacion for jugador in jugadores)
ganadores = [jugador for jugador in jugadores if jugador.puntuacion == max_puntuacion]
print("\nPuntuaciones:")
for jugador in jugadores:
print(jugador) # usa el método __str__ imprimiendo nombre y puntos
print("\nGanador(es):")
for ganador in ganadores:
print(ganador)
jugar()
Ingrese el número de jugadores (entre 2 y 26): 5 Ingrese el nombre del jugador 1: Pedro Ingrese el nombre del jugador 2: Ana Ingrese el nombre del jugador 3: Jose Ingrese el nombre del jugador 4: María Ingrese el nombre del jugador 5: Pablo Puntuaciones: Pedro → 2 Ana → 2 Jose → 5 María → 5 Pablo → 5 Ganador(es): Jose → 5 María → 5 Pablo → 5
ascii_uppercase
de la librería string
import random
import string
class Jugador:
def __init__(self, nombre):
self.nombre = nombre
self.puntuacion = 0
def lanzar_dado(self):
self.puntuacion = random.randint(1, 6)
def __str__(self):
return f"{self.nombre} -->º {self.puntuacion}"
def generar_nombres(num_jugadores):
letras_mayusculas = string.ascii_uppercase
nombres = [] # array de nombres ['A','B','C']
for i in range(num_jugadores):
nombres.append(letras_mayusculas[i])
return nombres
def jugar():
num_jugadores = int(input("Ingrese el número de jugadores (entre 2 y 26): "))
while num_jugadores < 2 or num_jugadores > 26:
num_jugadores = int(input("Número inválido. Ingrese el número de jugadores (entre 2 y 26): "))
nombres = generar_nombres(num_jugadores)
jugadores = [Jugador(nombre) for nombre in nombres]
for jugador in jugadores:
jugador.lanzar_dado()
max_puntuacion = max(jugador.puntuacion for jugador in jugadores)
ganadores = [jugador for jugador in jugadores if jugador.puntuacion == max_puntuacion]
print("\nPuntuaciones:")
for jugador in jugadores:
print(jugador)
print("\nGanador(es):")
for ganador in ganadores:
print(ganador)
jugar()
Ingrese el número de jugadores (entre 2 y 26): 8 Puntuaciones: A --> 5 B --> 1 C --> 4 D --> 2 E --> 1 F --> 4 G --> 4 H --> 1 Ganador(es): A --> 5
import random
import string
class Jugador:
def __init__(self, nombre):
self.nombre = nombre
self.puntuacion = 0
def lanzar_dado(self):
self.puntuacion = random.randint(1, 6)
def __str__(self):
return f"{self.nombre}: {self.puntuacion}"
def generar_nombres(num_jugadores):
letras_mayusculas = string.ascii_uppercase
nombres = []
for i in range(num_jugadores):
nombres.append(letras_mayusculas[i])
return nombres
def jugar():
num_jugadores = int(input("Ingrese el número de jugadores (entre 2 y 26): "))
while num_jugadores < 2 or num_jugadores > 26:
num_jugadores = int(input("Número inválido. Ingrese el número de jugadores (entre 2 y 26): "))
nombres = generar_nombres(num_jugadores)
jugadores = [Jugador(nombre) for nombre in nombres]
for jugador in jugadores:
jugador.lanzar_dado()
max_puntuacion = max(jugador.puntuacion for jugador in jugadores)
ganadores = [jugador for jugador in jugadores if jugador.puntuacion == max_puntuacion]
print("\nPuntuaciones:")
for jugador in jugadores:
print(jugador)
print("\nGanadores:")
ganadores_frase = ", ".join([ganador.nombre for ganador in ganadores]) # todos los ganadores separados por coma
puntuacion_ganadores = ganadores[0].puntuacion # la puntuación de uno es la de todos los ganadores
print(f"{ganadores_frase}. Puntos: {puntuacion_ganadores}")
jugar()
Ingrese el número de jugadores (entre 2 y 26): 8 Puntuaciones: A: 3 B: 4 C: 6 D: 2 E: 6 F: 5 G: 1 H: 4 Ganadores: C, E. Puntos: 6
input
While True
y break
import random
class Jugador:
def __init__(self, nombre):
self.nombre = nombre
self.puntuacion = 0
def lanzar_dado(self):
self.puntuacion = random.randint(1, 6)
def __str__(self):
return f"{self.nombre}: {self.puntuacion}"
def generar_nombres(num_jugadores):
'''Genera nombres automáticamente utilizando
el código ASCII de las letras mayúsculas'''
nombres = [chr(65 + i) for i in range(num_jugadores)] # código ASCII
return nombres
def jugar():
'''Solicita el número de jugadores y valida que esté entre 2 y 26'''
while True:
num_jugadores = int(input("Ingrese el número de jugadores (entre 2 y 26): "))
if 2 <= num_jugadores <= 26:
break
print("Número inválido. Intente de nuevo.")
nombres = generar_nombres(num_jugadores)
jugadores = [Jugador(nombre) for nombre in nombres]
for jugador in jugadores:
jugador.lanzar_dado()
max_puntuacion = max(jugador.puntuacion for jugador in jugadores)
ganadores = [jugador for jugador in jugadores if jugador.puntuacion == max_puntuacion]
print("\nPuntuaciones:")
for jugador in jugadores:
print(jugador)
print("\nGanador(es):")
ganadores_frase = ", ".join([ganador.nombre for ganador in ganadores])
puntuacion_ganadores = ganadores[0].puntuacion
print(f"{ganadores_frase}. Puntos: {puntuacion_ganadores}")
jugar()
Ingrese el número de jugadores (entre 2 y 26): 6 Puntuaciones: A: 1 B: 5 C: 5 D: 1 E: 3 F: 2 Ganador(es): B, C. Puntos: 5
import random
class Jugador:
def __init__(self, nombre):
self.nombre = nombre
self.puntuacion = 0
def lanzar_dado(self):
self.puntuacion = random.randint(1, 6)
def __str__(self):
return f"{self.nombre}: {self.puntuacion}"
class Juego:
def __init__(self, num_jugadores):
self.num_jugadores = num_jugadores
self.jugadores = []
self.ganadores = []
def generar_nombres(self):
nombres = [chr(65 + i) for i in range(self.num_jugadores)] # código ASCII
return nombres
def jugar(self):
nombres = self.generar_nombres()
self.jugadores = [Jugador(nombre) for nombre in nombres]
for jugador in self.jugadores:
jugador.lanzar_dado()
max_puntuacion = max(jugador.puntuacion for jugador in self.jugadores)
self.ganadores = [jugador for jugador in self.jugadores if jugador.puntuacion == max_puntuacion]
print("\nPuntuaciones:")
for jugador in self.jugadores:
print(jugador)
print("\nGanador(es):")
ganadores_frase = ", ".join([ganador.nombre for ganador in self.ganadores])
puntuacion_ganadores = self.ganadores[0].puntuacion
print(f"{ganadores_frase}. Puntos: {puntuacion_ganadores}")
if __name__ == "__main__":
NUM_JUGADORES = 4
juego = Juego(NUM_JUGADORES)
juego.jugar()
Puntuaciones: A: 6 B: 4 C: 6 D: 1 Ganador(es): A, C. Puntos: 6
Usando un diccionario:
{'Jugador1': 5, 'Jugador2': 6, 'Jugador3': 5, 'Jugador4': 3}
import random
class Jugador:
def __init__(self, nombre):
self.nombre = nombre
self.puntuacion = 0
def lanzar_dado(self):
self.puntuacion = random.randint(1, 6)
class Juego:
def __init__(self, jugadores):
self.jugadores = [Jugador(nombre) for nombre in jugadores]
self.ranking = {} # diccionario → clave=nombre valor=puntuación
def jugar(self):
for jugador in self.jugadores:
jugador.lanzar_dado()
self.ranking[jugador.nombre] = jugador.puntuacion # añadimos parejas clave:valor al diccionario
print(f'{jugador.nombre} ha obtenido {jugador.puntuacion} puntos')
max_puntuacion = max(self.ranking.values()) # máximo de las puntuaciones
# ganadores es un vector con el nombre de los ganadores
ganadores = [nombre for nombre, puntuacion in self.ranking.items() if puntuacion == max_puntuacion]
print(f'\nRanking:') # Ranking en orden decreciente de puntuación
for nombre, puntuacion in sorted(self.ranking.items(), key=lambda item: item[1], reverse=True):
print(f'{nombre}: {puntuacion} puntos')
print(f'\nGanador(es):')
for ganador in ganadores:
print(f'{ganador} con {max_puntuacion} puntos')
# Ejemplo de uso
nombres = ['Jugador1', 'Jugador2', 'Jugador3', 'Jugador4'] # Poner los deseados
juego = Juego(nombres)
juego.jugar()
Jugador1 ha obtenido 6 puntos Jugador2 ha obtenido 1 puntos Jugador3 ha obtenido 6 puntos Jugador4 ha obtenido 1 puntos Ranking: Jugador1: 6 puntos Jugador3: 6 puntos Jugador2: 1 puntos Jugador4: 1 puntos Ganador(es): Jugador1 con 6 puntos Jugador3 con 6 puntos