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\n Nº 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 ("\n Selecciona 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