Cargando tu progreso…

Pokédex Codex

Python: Control de Flujo

META

🎯 Meta: que tu programa tome decisiones y repita cosas. Hasta ahora tu código corría en línea recta. Ahora va a poder elegir caminos y dar vueltas.


🎮 Analogía: decisiones en batalla

En una batalla Pokémon, vos tomás decisiones todo el tiempo: “SI el rival es de tipo Agua, USO un ataque Eléctrico”. Y repetís acciones: “MIENTRAS el rival tenga HP, sigo atacando”.

Eso es exactamente el control de flujo: decirle al programa cuándo hacer algo (decisiones) y cuántas veces hacerlo (repeticiones).


🔀 if: tomar decisiones

if ejecuta un bloque de código solo si una condición es verdadera.

nivel = 30

if nivel >= 25:
    print("¡Tu Pokémon puede evolucionar!")
CUIDADO

⚠️ La indentación importa. El código “adentro” del if va con 4 espacios de sangría. Python usa esa sangría para saber qué está adentro y qué afuera. No es decorativo: es obligatorio.


P: ¿Qué es lo que hace que el código adentro de un `if` se ejecute?
- Que la línea empiece con cuatro espacios
+ Que la condición sea verdadera (`True`)
- Que la variable no sea `None`
> La indentación le dice a Python qué código está "adentro", pero ese código solo se ejecuta si la condición del `if` es `True`.

🔢 Operadores de comparación

Sirven para construir condiciones. Devuelven True o False:

OperadorSignificaEjemploResultado
==igual anivel == 25True si nivel es 25
!=distinto detipo != "Agua"True si no es Agua
>mayor quehp > 0True si hp es positivo
<menor quenivel < 100
>=mayor o igualnivel >= 25
<=menor o igualhp <= 0
CUIDADO

⚠️ Ojo: = asigna (guarda en una variable), == compara. ¡No los confundas!

nivel = 25      # asignación: guardo 25 en nivel
nivel == 25     # comparación: ¿nivel es igual a 25? → True

🪜 elif y else: más caminos

else es el “si no”. elif (“else if”) agrega más condiciones a chequear.

hp = 40

if hp > 70:
    print("Tu Pokémon está sano 💚")
elif hp > 30:
    print("Tu Pokémon está cansado 💛")
elif hp > 0:
    print("¡Tu Pokémon está grave! ❤️")
else:
    print("Tu Pokémon se debilitó 💀")

Python revisa las condiciones de arriba hacia abajo y entra en la primera que sea verdadera. Las demás las ignora.


🧠 Operadores lógicos: and, or, not

Combinan varias condiciones:

  • and → verdadero si ambas son verdaderas.
  • or → verdadero si al menos una es verdadera.
  • not → invierte (verdadero ↔ falso).
nivel = 30
tipo = "Fuego"

# Evoluciona SI tiene nivel suficiente Y es de fuego.
if nivel >= 25 and tipo == "Fuego":
    print("¡Charmander evoluciona a Charmeleon!")

# Es fuerte SI es legendario O tiene nivel 100.
if es_legendario or nivel == 100:
    print("¡Pokémon poderoso!")

# Puede pelear SI NO está debilitado.
if not debilitado:
    print("¡A la batalla!")

🔁 while: repetir mientras…

while repite un bloque mientras una condición sea verdadera. Es el bucle de “seguí hasta que…”.

hp_rival = 100

while hp_rival > 0:
    print(f"Atacás. HP del rival: {hp_rival}")
    hp_rival = hp_rival - 20   # bajamos el HP en cada vuelta

print("¡Ganaste la batalla! 🏆")
CUIDADO

⚠️ ¡Cuidado con los bucles infinitos! Si la condición nunca se vuelve falsa, el programa nunca termina. Asegurate de que algo cambie adentro del while (acá, el HP baja).


🔂 for: repetir una cantidad de veces

for recorre una secuencia de valores, uno por uno. Es el bucle de “para cada…“.

# Recorre una lista de Pokémon (las listas las vemos a fondo más adelante).
equipo = ["Pikachu", "Charizard", "Snorlax"]

for pokemon in equipo:
    print(f"Tengo a {pokemon}")

range(): generar números

range() genera una secuencia de números, ideal para repetir N veces.

# Repite 5 veces (del 0 al 4).
for i in range(5):
    print(f"Lanzamiento de Pokéball número {i + 1}")

# range(inicio, fin): del 1 al 10 (el 'fin' NO se incluye).
for nivel in range(1, 11):
    print(f"Nivel {nivel}")

# range(inicio, fin, paso): de 0 a 100 de 10 en 10.
for hp in range(0, 101, 10):
    print(hp)
TIP

💡 Recordá: range(5) da 0, 1, 2, 3, 4 (empieza en 0, termina antes del 5).


P: ¿Qué imprime `range(3)` si lo recorrés con `for i in range(3): print(i)`?
- 1, 2, 3
- 0, 1, 2, 3
+ 0, 1, 2
> `range(3)` genera los números del 0 al 2 (tres números). El límite final NO se incluye.

⏭️ break y continue

Controlan el bucle desde adentro:

  • breakcorta el bucle por completo.
  • continuesaltea el resto de esta vuelta y pasa a la siguiente.
# break: dejamos de buscar al encontrar a Mewtwo.
for pokemon in equipo:
    if pokemon == "Mewtwo":
        print("¡Encontramos a Mewtwo!")
        break          # salimos del for inmediatamente

# continue: salteamos a los Pokémon debilitados.
for pokemon in equipo:
    if pokemon == "debilitado":
        continue       # saltamos a la próxima vuelta
    print(f"{pokemon} entra a la batalla")

📝 Resumen

# if / elif / else: decisiones
if hp > 50:
    print("sano")
elif hp > 0:
    print("herido")
else:
    print("debilitado")

# Comparadores: ==, !=, >, <, >=, <=
# Lógicos: and, or, not
if nivel >= 25 and tipo == "Fuego":
    print("evoluciona")

# while: repetir mientras una condición sea verdadera
while hp > 0:
    hp -= 20

# for + range: repetir N veces
for i in range(5):
    print(i)

# break corta el bucle; continue saltea una vuelta
ConceptoPara qué sirve
if/elif/elseElegir qué código correr
==, !=, >, <Comparar valores
and, or, notCombinar condiciones
whileRepetir mientras algo sea cierto
for + range()Repetir una cantidad de veces
breakCortar el bucle
continueSaltar a la próxima vuelta

➡️ ¿Y ahora qué?

Ahora practicá: andá a los ejercicios de este tema y resolvelos. Se corrigen al instante con tests reales en tu navegador. 💪

ÁNIMO

“En la batalla y en el código, las buenas decisiones ganan combates.”