Skip to content

Commit 4525594

Browse files
31 - Python
1 parent bd6d178 commit 4525594

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
"""
2+
/*
3+
* EJERCICIO:
4+
* ¡Los JJOO de París 2024 han comenzado!
5+
* Crea un programa que simule la celebración de los juegos.
6+
* El programa debe permitir al usuario registrar eventos y participantes,
7+
* realizar la simulación de los eventos asignando posiciones de manera aleatoria
8+
* y generar un informe final. Todo ello por terminal.
9+
* Requisitos:
10+
* 1. Registrar eventos deportivos.
11+
* 2. Registrar participantes por nombre y país.
12+
* 3. Simular eventos de manera aleatoria en base a los participantes (mínimo 3).
13+
* 4. Asignar medallas (oro, plata y bronce) basándose en el resultado del evento.
14+
* 5. Mostrar los ganadores por cada evento.
15+
* 6. Mostrar el ranking de países según el número de medallas.
16+
* Acciones:
17+
* 1. Registro de eventos.
18+
* 2. Registro de participantes.
19+
* 3. Simulación de eventos.
20+
* 4. Creación de informes.
21+
* 5. Salir del programa.
22+
*/
23+
"""
24+
from random import choice
25+
26+
class Participantes:
27+
lista = []
28+
29+
def __init__(self, nombre:str, pais:str) -> None:
30+
self.nombre = nombre
31+
self.pais = pais
32+
33+
# Agrega el nuevo participante a lista
34+
Participantes.lista.append(self)
35+
36+
# Si no esta el pais en top_paises lo crea
37+
if pais not in Medallas.top_paises:
38+
Medallas.top_paises[pais] = {"oro":0,"plata":0,"bronce":0}
39+
40+
class Medallas:
41+
top_paises = {}
42+
43+
def __init__(
44+
self,nombre:str, oro:Participantes, plata:Participantes, bronce:Participantes
45+
) -> None:
46+
self.evento = nombre
47+
self.oro = oro
48+
self.plata = plata
49+
self.bronce = bronce
50+
51+
class Eventos:
52+
lista = []
53+
54+
def __init__(self, nombre:str) -> None:
55+
self.nombre = nombre
56+
self.finalizado = False
57+
Eventos.lista.append(self)
58+
59+
def decidir_ganador(self):
60+
lista_participantes = Participantes.lista.copy()
61+
62+
if not self.finalizado:
63+
try:
64+
ganadores = []
65+
66+
for n in range(3):
67+
elegido = choice(lista_participantes)
68+
lista_participantes.remove(elegido)
69+
ganadores.append(elegido)
70+
71+
oro, plata, bronce = ganadores
72+
registro = Medallas(self.nombre,oro,plata,bronce)
73+
self.finalizado = True
74+
return registro
75+
76+
except Exception as e:
77+
print(f"Se necesitan al menos 3 participantes\nNº de participantes actuales: {len(Participantes.lista)}")
78+
print(e)
79+
80+
class Juegos:
81+
registro_finalizados = []
82+
eventos_finalizados = []
83+
def registrar_evento(self,nombre:str):
84+
nuevo_evento = Eventos(nombre)
85+
print(f"Evento {nuevo_evento.nombre} se ha registrado")
86+
87+
def registrar_participante(self,nombre:str,pais:str):
88+
nuevo_participante = Participantes(nombre,pais)
89+
print(f"{nuevo_participante.nombre} de {pais} se ha registrado")
90+
91+
def simular_evento(self,nombre_evento:str):
92+
evento = None
93+
for eventos in Eventos.lista:
94+
if eventos.nombre == nombre_evento:
95+
evento = eventos
96+
if evento:
97+
medallas = evento.decidir_ganador()
98+
if medallas:
99+
print(f"Resultado del evento {medallas.evento}")
100+
print(f"Oro - {medallas.oro.nombre.title()} de {medallas.oro.pais.upper()}")
101+
print(f"Plata - {medallas.plata.nombre.title()} de {medallas.plata.pais.upper()}")
102+
print(f"Bronce - {medallas.bronce.nombre.title()} de {medallas.bronce.pais.upper()}\n")
103+
104+
Medallas.top_paises[medallas.oro.pais]["oro"] += 1
105+
Medallas.top_paises[medallas.plata.pais]["plata"] += 1
106+
Medallas.top_paises[medallas.bronce.pais]["bronce"] += 1
107+
108+
Juegos.registro_finalizados.append(medallas)
109+
Juegos.eventos_finalizados.append(nombre_evento)
110+
else:
111+
print(f"{nombre_evento} no esta registrado")
112+
113+
def generar_informe(self):
114+
for medalla in Juegos.registro_finalizados:
115+
print(f"Resultado del evento {medalla.evento}")
116+
print(f"Oro - {medalla.oro.nombre} de {medalla.oro.pais}")
117+
print(f"Plata - {medalla.plata.nombre} de {medalla.plata.pais}")
118+
print(f"Bronce - {medalla.bronce.nombre} de {medalla.bronce.pais}\n")
119+
120+
print()
121+
print("Lista de Paises")
122+
# Ranking de paises por medallas de oro
123+
for pais,n_medallas in sorted(Medallas.top_paises.items(),key=lambda item: item[1]["oro"],reverse=True):
124+
print(f"{pais.title()} ---> Oro: {n_medallas["oro"]}, Plata: {n_medallas["plata"]}, Bronce: {n_medallas["bronce"]}")
125+
126+
def hacer_olimpiadas():
127+
juego = Juegos()
128+
salir = False
129+
print("Bienvenido a las olimpiadas")
130+
while not salir:
131+
print("\nSelecciona una opcion:")
132+
print("1- Registrar Evento")
133+
print("2- Registrar Participante")
134+
print("3- Empezar Evento")
135+
print("4- Mostrar Informe")
136+
print("5- Salir")
137+
seleccion = input("")
138+
139+
if seleccion == "1":
140+
nombre_evento = input("Ponga el nombre del Evento:\n")
141+
juego.registrar_evento(nombre_evento.lower())
142+
print(f"{nombre_evento} ha sido registrado")
143+
144+
elif seleccion == "2":
145+
nombre_participante = input("Ponga el nombre del participante:\n")
146+
pais_participante = input("Ponga el nombre del pais:\n")
147+
juego.registrar_participante(nombre_participante.lower(),pais_participante.lower())
148+
print(f"{nombre_participante} de {pais_participante} ha sido registrado")
149+
150+
elif seleccion == "3":
151+
for evento in Eventos.lista:
152+
if evento.nombre not in Juegos.eventos_finalizados:
153+
print(f"{evento.nombre.title()}")
154+
155+
seleccion_evento = input("Indique el nombre de un evento ya registrado:\n")
156+
if seleccion_evento not in Juegos.eventos_finalizados:
157+
juego.simular_evento(seleccion_evento.lower())
158+
159+
else:
160+
print(f"{seleccion_evento} ya se ha simulado")
161+
elif seleccion == "4":
162+
juego.generar_informe()
163+
elif seleccion == "5":
164+
salir = True
165+
else:
166+
print("Seleccione una de las opciones anteriores\n")
167+
168+
if __name__ == "__main__":
169+
hacer_olimpiadas()

0 commit comments

Comments
 (0)