Skip to content

Commit 251eb31

Browse files
authored
Merge pull request #8053 from idiegorojas/main
#36 - Python
2 parents eef57bc + 20d6924 commit 251eb31

File tree

2 files changed

+290
-0
lines changed

2 files changed

+290
-0
lines changed
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
"""
2+
# 36 - Sombrero seleccionador
3+
"""
4+
# Desarrolla un programa que simule el comportamiento del sombrero.
5+
6+
"""
7+
Requisitos:
8+
"""
9+
# 1. El sombrero realizará 10 preguntas para determinar la casa del alumno.
10+
# 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data.
11+
# (Puedes elegir las que quieras)
12+
13+
14+
""" Acciones: """
15+
16+
# 1. Crea un programa que solicite el nombre del alumno y realice 10 preguntas, con cuatro posibles respuestas cada una.
17+
# 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección).
18+
# 3. Una vez finalizado, el sombrero indica el nombre del alumno y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, pero indicándole al alumno que la decisión ha sido complicada).
19+
20+
import random
21+
22+
23+
all_questions = {
24+
"¿Qué valoras más en ti mismo?": {
25+
"a": "Creatividad y diseño",
26+
"b": "Lógica y resolución de problemas",
27+
"c": "Adaptabilidad y portabilidad",
28+
"d": "Análisis y patrones"
29+
},
30+
"¿Qué herramienta te gustaría dominar?": {
31+
"a": "Figma y librerías de UI",
32+
"b": "Docker y bases de datos",
33+
"c": "Flutter o Swift",
34+
"d": "Python y bibliotecas de análisis"
35+
},
36+
"¿Qué tipo de proyecto te emociona más?": {
37+
"a": "Una interfaz innovadora e intuitiva",
38+
"b": "Una API robusta y escalable",
39+
"c": "Una app que funcione en cualquier dispositivo",
40+
"d": "Un modelo predictivo preciso"
41+
},
42+
"¿Cuál es tu mayor fortaleza?": {
43+
"a": "Atención al detalle visual",
44+
"b": "Pensamiento estructurado",
45+
"c": "Adaptabilidad a diferentes entornos",
46+
"d": "Pensamiento analítico"
47+
},
48+
"¿Qué te gusta aprender en tu tiempo libre?": {
49+
"a": "Tendencias de diseño y experiencia de usuario",
50+
"b": "Arquitectura de sistemas y patrones",
51+
"c": "Nuevos frameworks móviles",
52+
"d": "Técnicas de machine learning"
53+
},
54+
"¿Qué problema te gustaría resolver?": {
55+
"a": "Mejorar la interacción humano-computador",
56+
"b": "Crear sistemas distribuidos eficientes",
57+
"c": "Llevar la tecnología a todas partes",
58+
"d": "Extraer conocimiento de datos complejos"
59+
},
60+
"¿Qué tipo de feedback valoras más?": {
61+
"a": "Sobre la usabilidad y apariencia",
62+
"b": "Sobre el rendimiento y mantenibilidad",
63+
"c": "Sobre la experiencia en distintos dispositivos",
64+
"d": "Sobre la precisión de los resultados"
65+
},
66+
"¿Qué habilidad quieres mejorar?": {
67+
"a": "Diseño de interfaces atractivas",
68+
"b": "Diseño de arquitectura de software",
69+
"c": "Optimización para diferentes dispositivos",
70+
"d": "Modelado estadístico"
71+
},
72+
"¿Qué te motiva a programar?": {
73+
"a": "Ver cómo los usuarios interactúan con mi producto",
74+
"b": "Construir sistemas robustos que soporten todo",
75+
"c": "Crear aplicaciones que la gente lleve consigo",
76+
"d": "Descubrir insights ocultos en los datos"
77+
},
78+
"¿Qué consideras un código exitoso?": {
79+
"a": "El que brinda una experiencia fluida al usuario",
80+
"b": "El que es escalable, mantenible y eficiente",
81+
"c": "El que funciona en todos los dispositivos sin problemas",
82+
"d": "El que transforma datos en información útil"
83+
}
84+
}
85+
86+
87+
class SombreroSeleccionador:
88+
def __init__(self):
89+
self.frontend = 0
90+
self.backend = 0
91+
self.mobile = 0
92+
self.data = 0
93+
94+
def hacer_preguntas(self):
95+
print("\n🎩 EL SOMBRERO SELECCIONADOR 🎩")
96+
print("================================")
97+
98+
nombre = input("\nBienvenido/a, ¿cuál es tu nombre? ")
99+
100+
print(f"\nMuy bien {nombre}, te haré 10 preguntas para determinar tu casa.")
101+
print("Para cada pregunta, elige la opción (a, b, c, d) que más te identifique.\n")
102+
103+
for i, (pregunta, opciones) in enumerate(all_questions.items(), 1):
104+
print(f"\nPregunta {i}: {pregunta}")
105+
for letra, respuesta in opciones.items():
106+
print(f"{letra}) {respuesta}")
107+
108+
respuesta = ""
109+
while respuesta not in ["a", "b", "c", "d"]:
110+
respuesta = input("Tu respuesta (a/b/c/d): ").lower()
111+
112+
# Asignar puntos según la respuesta
113+
if respuesta == "a":
114+
self.frontend += 1
115+
elif respuesta == "b":
116+
self.backend += 1
117+
elif respuesta == "c":
118+
self.mobile += 1
119+
elif respuesta == "d":
120+
self.data += 1
121+
122+
return nombre
123+
124+
def determinar_casa(self):
125+
puntuaciones = {
126+
"Frontend": self.frontend,
127+
"Backend": self.backend,
128+
"Mobile": self.mobile,
129+
"Data": self.data
130+
}
131+
132+
# Encontrar el puntaje máximo
133+
max_puntuacion = max(puntuaciones.values())
134+
135+
# Encontrar todas las casas con la puntuación máxima
136+
casas_maximas = [casa for casa, puntuacion in puntuaciones.items()
137+
if puntuacion == max_puntuacion]
138+
139+
# Si hay empate, elegir aleatoriamente
140+
casa_elegida = random.choice(casas_maximas)
141+
142+
return casa_elegida, len(casas_maximas) > 1
143+
144+
def iniciar(self):
145+
nombre = self.hacer_preguntas()
146+
casa, hubo_empate = self.determinar_casa()
147+
148+
print("\n" + "=" * 50)
149+
print(f"\n🎩 Mmm, interesante {nombre}...")
150+
151+
if hubo_empate:
152+
print("La decisión ha sido complicada, pero finalmente...")
153+
154+
print(f"\n¡TU CASA ES {casa.upper()}! 🎉")
155+
156+
if casa == "Frontend":
157+
print("\n✨ Tienes un ojo para el diseño y una pasión por crear experiencias de usuario excepcionales.")
158+
elif casa == "Backend":
159+
print("\n🔧 Tu fortaleza está en construir sistemas robustos y eficientes que sostienen todo lo demás.")
160+
elif casa == "Mobile":
161+
print("\n📱 Tienes el talento para llevar la tecnología a todos los dispositivos y a cualquier lugar.")
162+
elif casa == "Data":
163+
print("\n📊 Tu capacidad analítica te permite descubrir información valiosa donde otros no la ven.")
164+
165+
166+
# Ejecutar el programa si se ejecuta como script principal
167+
if __name__ == "__main__":
168+
sombrero = SombreroSeleccionador()
169+
sombrero.iniciar()
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
"""
2+
# 37 - Oasis vs Linkin Park
3+
"""
4+
5+
# Desarrolla un programa que se conecte al API de Spotify y los compare."
6+
7+
"""
8+
Requisitos:
9+
"""
10+
# 1. Crea una cuenta de desarrollo en https://developer.spotify.com.
11+
# 2. Conéctate al API utilizando tu lenguaje de programación.
12+
# 3. Recupera datos de los endpoint que tú quieras.
13+
14+
"""
15+
Acciones:
16+
"""
17+
# 1. Accede a las estadísticas de las dos bandas.
18+
# Por ejemplo: número total de seguidores, escuchas mensuales,
19+
# canción con más reproducciones...
20+
# 2. Compara los resultados de, por lo menos, 3 endpoint.
21+
# 3. Muestra todos los resultados por consola para notificar al usuario.
22+
# 4. Desarrolla un criterio para seleccionar qué banda es más popular.
23+
24+
25+
import spotipy
26+
from spotipy.oauth2 import SpotifyClientCredentials
27+
import os
28+
from dotenv import load_dotenv
29+
30+
# Cargar variables de entorno desde .env (opcional)
31+
load_dotenv()
32+
33+
# Configuración de credenciales
34+
client_id = os.getenv('SPOTIFY_CLIENT_ID')
35+
client_secret = os.getenv('SPOTIFY_CLIENT_SECRET')
36+
37+
38+
# Inicializar el cliente de Spotify
39+
sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(
40+
client_id=client_id,
41+
client_secret=client_secret
42+
))
43+
44+
# IDs de Oasis y Linkin Park
45+
oasis_id = '2DaxqgrOhkeH0fpeiQq2f4'
46+
linkin_park_id = '6XyY86QOPPrYVGvF9ch6wz'
47+
48+
def get_artist_info(artist_id):
49+
"""Obtiene información básica del artista"""
50+
return sp.artist(artist_id)
51+
52+
def get_artist_top_tracks(artist_id, country='US'):
53+
"""Obtiene las canciones más populares del artista"""
54+
return sp.artist_top_tracks(artist_id, country=country)
55+
56+
def get_artist_albums(artist_id):
57+
"""Obtiene los álbumes del artista"""
58+
return sp.artist_albums(artist_id, album_type='album')
59+
60+
def get_related_artists(artist_id):
61+
"""Obtiene artistas relacionados"""
62+
return sp.artist_related_artists(artist_id)
63+
64+
def compare_artists(artist1_id, artist2_id):
65+
# 1. Comparar información general (seguidores, popularidad, géneros)
66+
artist1 = get_artist_info(artist1_id)
67+
artist2 = get_artist_info(artist2_id)
68+
69+
print(f"\n--- COMPARANDO {artist1['name']} VS {artist2['name']} ---\n")
70+
71+
# Mostrar información general
72+
print(f"--- INFORMACIÓN GENERAL ---")
73+
print(f"{artist1['name']}:")
74+
print(f"- Seguidores: {artist1['followers']['total']:,}")
75+
print(f"- Popularidad: {artist1['popularity']}/100")
76+
print(f"- Géneros: {', '.join(artist1['genres'])}")
77+
78+
print(f"\n{artist2['name']}:")
79+
print(f"- Seguidores: {artist2['followers']['total']:,}")
80+
print(f"- Popularidad: {artist2['popularity']}/100")
81+
print(f"- Géneros: {', '.join(artist2['genres'])}")
82+
83+
# 2. Comparar canciones más populares
84+
top_tracks1 = get_artist_top_tracks(artist1_id)
85+
top_tracks2 = get_artist_top_tracks(artist2_id)
86+
87+
print(f"\n--- TOP 5 CANCIONES ---")
88+
print(f"{artist1['name']}:")
89+
for i, track in enumerate(top_tracks1['tracks'][:5], 1):
90+
print(f"{i}. {track['name']} - Popularidad: {track['popularity']}/100")
91+
92+
print(f"\n{artist2['name']}:")
93+
for i, track in enumerate(top_tracks2['tracks'][:5], 1):
94+
print(f"{i}. {track['name']} - Popularidad: {track['popularity']}/100")
95+
96+
# 3. Comparar álbumes
97+
albums1 = get_artist_albums(artist1_id)
98+
albums2 = get_artist_albums(artist2_id)
99+
100+
print(f"\n--- ÁLBUMES ---")
101+
print(f"{artist1['name']}: {len(albums1['items'])} álbumes")
102+
print(f"{artist2['name']}: {len(albums2['items'])} álbumes")
103+
104+
# 4. Desarrollar criterio de popularidad
105+
# Podemos usar una combinación de seguidores y popularidad
106+
popularity_score1 = artist1['followers']['total'] * artist1['popularity'] / 100
107+
popularity_score2 = artist2['followers']['total'] * artist2['popularity'] / 100
108+
109+
print(f"\n--- RESULTADO DE POPULARIDAD ---")
110+
print(f"{artist1['name']}: {popularity_score1:,.0f} puntos")
111+
print(f"{artist2['name']}: {popularity_score2:,.0f} puntos")
112+
113+
if popularity_score1 > popularity_score2:
114+
print(f"\n¡{artist1['name']} es más popular según nuestros criterios!")
115+
elif popularity_score2 > popularity_score1:
116+
print(f"\n¡{artist2['name']} es más popular según nuestros criterios!")
117+
else:
118+
print("\n¡Ambas bandas tienen la misma popularidad!")
119+
120+
# Ejecutar la comparación
121+
compare_artists(oasis_id, linkin_park_id)

0 commit comments

Comments
 (0)