Promedio de niveles
Devolvé el promedio de la lista de niveles. Si está vacía, devolvé 0. Ejemplo: promedio_niveles([10, 20, 30]) → 20.0 · promedio_niveles([]) → 0
Entrá y llevá tu progreso —ejercicios, medallas y Pokémon— a cualquier dispositivo. 🔄
Si tu cuenta ya tiene progreso guardado, se carga ese al entrar.
Entraste como . Tu progreso se sincroniza solo. 🔄
Devolvé el promedio de la lista de niveles. Si está vacía, devolvé 0. Ejemplo: promedio_niveles([10, 20, 30]) → 20.0 · promedio_niveles([]) → 0
🎯 Meta: guardar muchos datos juntos. Hasta ahora cada variable guardaba UNA cosa. Ahora vas a manejar equipos enteros, Pokédex completas y mucho más.
Un Entrenador no lleva un solo Pokémon: lleva un equipo (hasta 6). Una lista es justamente eso: una colección ordenada de cosas guardadas bajo un solo nombre. ⚾⚾⚾
Una lista se escribe entre corchetes [], con los elementos separados por comas.
equipo = ["Pikachu", "Charizard", "Snorlax"]
niveles = [25, 50, 40]
mezcla = ["Pikachu", 25, True] # puede tener tipos distintos
vacia = [] # una lista vacía
Cada elemento tiene una posición (índice). ¡Empieza en 0!
equipo = ["Pikachu", "Charizard", "Snorlax"]
print(equipo[0]) # Pikachu (el primero)
print(equipo[1]) # Charizard
print(equipo[-1]) # Snorlax (el último, contando desde atrás)
equipo[0] = "Raichu" # cambiamos el primero (Pikachu evolucionó)
print(equipo) # ['Raichu', 'Charizard', 'Snorlax']
equipo = ["Pikachu", "Charizard"]
equipo.append("Snorlax") # agrega al final → ['Pikachu','Charizard','Snorlax']
equipo.insert(0, "Mewtwo") # inserta en una posición
equipo.remove("Charizard") # borra por valor
ultimo = equipo.pop() # saca y devuelve el último
print(len(equipo)) # cantidad de elementos
print("Pikachu" in equipo) # ¿está? → True o False
equipo.sort() # ordena la lista
equipo.reverse() # la da vuelta
| Método | Qué hace |
|---|---|
.append(x) | Agrega x al final |
.insert(i, x) | Inserta x en la posición i |
.remove(x) | Borra la primera aparición de x |
.pop() | Saca y devuelve el último |
len(lista) | Cantidad de elementos |
x in lista | ¿x está en la lista? |
.sort() | Ordena |
.reverse() | Invierte el orden |
P: Tenés `equipo = ["Pikachu", "Charizard", "Snorlax"]`. ¿Qué devuelve `equipo[-1]`?
- "Pikachu"
- "Charizard"
+ "Snorlax"
> El índice `-1` accede al último elemento de la lista, contando desde atrás. `-2` sería "Charizard".
Una tupla es como una lista, pero inmutable (no se puede cambiar). Se escribe con paréntesis (). Sirve para datos fijos.
coordenada = (10, 20) # una posición que no debería cambiar
tipos_pikachu = ("Electrico",) # tupla de un solo elemento (ojo a la coma)
print(coordenada[0]) # 10
# coordenada[0] = 5 # ❌ ERROR: una tupla no se puede modificar
💡 Usá tupla cuando los datos NO deberían cambiar (como las coordenadas de un punto). Usá lista cuando sí (como tu equipo, que cambia).
Un set (conjunto) guarda elementos únicos, sin orden y sin repetidos. Se escribe con llaves {}.
tipos_vistos = {"Fuego", "Agua", "Fuego", "Planta"}
print(tipos_vistos) # {'Fuego', 'Agua', 'Planta'} (el Fuego repetido desaparece)
tipos_vistos.add("Electrico") # agregar
print("Agua" in tipos_vistos) # True
Útil para sacar duplicados de una lista:
capturados = ["Pikachu", "Pidgey", "Pikachu", "Rattata"]
unicos = set(capturados)
print(len(unicos)) # 3 (sin contar el Pikachu repetido)
Un diccionario guarda pares de clave: valor. Es como una Pokédex de verdad: buscás por nombre y obtenés los datos. Se escribe con llaves {}.
pikachu = {
"nombre": "Pikachu",
"tipo": "Electrico",
"nivel": 25,
"hp": 100,
}
print(pikachu["nombre"]) # Pikachu (accedés por la clave)
print(pikachu["nivel"]) # 25
pikachu["nivel"] = 26 # cambiar un valor
pikachu["ataque"] = 55 # agregar una clave nueva
print(pikachu.get("defensa", 0)) # .get() devuelve un default si la clave no está
for clave in pikachu:
print(clave, "->", pikachu[clave])
# O directamente clave y valor con .items()
for clave, valor in pikachu.items():
print(f"{clave}: {valor}")
| Operación | Cómo |
|---|---|
| Acceder | dic["clave"] |
| Acceso seguro | dic.get("clave", default) |
| Agregar/cambiar | dic["clave"] = valor |
| Borrar | del dic["clave"] |
| ¿Existe la clave? | "clave" in dic |
| Recorrer | for k, v in dic.items(): |
P: ¿Cuál es la diferencia principal entre una lista `[]` y un set `{}`?
- La lista usa llaves y el set corchetes
- El set es más rápido para todo
+ El set no guarda duplicados y no tiene orden
> El set descarta los repetidos automáticamente y no garantiza ningún orden. La lista sí mantiene duplicados y el orden en que los agregaste.
Una comprensión arma una lista nueva a partir de otra, en una sola línea. Es elegante y muy “pythónico”.
niveles = [25, 50, 40, 15]
# Forma larga:
dobles = []
for n in niveles:
dobles.append(n * 2)
# Comprensión (la misma cosa, en una línea):
dobles = [n * 2 for n in niveles]
print(dobles) # [50, 100, 80, 30]
# Con condición (filtrar):
altos = [n for n in niveles if n >= 40]
print(altos) # [50, 40]
Estructura: [expresión for elemento in coleccion if condición].
equipo = ["Pikachu", "Charizard", "Snorlax"]
for indice, pokemon in enumerate(equipo):
print(f"{indice + 1}. {pokemon}")
# 1. Pikachu
# 2. Charizard
# 3. Snorlax
nombres = ["Pikachu", "Charizard"]
niveles = [25, 50]
for nombre, nivel in zip(nombres, niveles):
print(f"{nombre} es nivel {nivel}")
# Pikachu es nivel 25
# Charizard es nivel 50
# Lista: ordenada y modificable
equipo = ["Pikachu", "Charizard"]
equipo.append("Snorlax")
# Tupla: inmutable
punto = (10, 20)
# Set: sin duplicados
tipos = {"Fuego", "Agua"}
# Diccionario: clave -> valor
pikachu = {"nombre": "Pikachu", "nivel": 25}
# Comprensión: lista en una línea
dobles = [n * 2 for n in [1, 2, 3]]
# enumerate y zip
for i, p in enumerate(equipo): ...
for n, l in zip(nombres, niveles): ...
| Colección | Símbolo | Característica |
|---|---|---|
| Lista | [] | Ordenada, modificable |
| Tupla | () | Ordenada, inmutable |
| Set | {} | Única, sin orden |
| Diccionario | {clave: valor} | Pares clave-valor |
Ahora practicá: andá a los ejercicios de este tema y resolvelos. Se corrigen al instante con tests reales en tu navegador. 💪
⚡ “Un buen Entrenador conoce a cada miembro de su equipo. Un buen programador conoce sus estructuras de datos.”