trubidata
Lección 3 de 12·22 min

Condicionales y bucles

En esta guía (15)

Hasta ahora tus programas ejecutaban todas las líneas, una vez cada una. En esta lección vas a aprender a decidir qué código se ejecuta (if, elif, else) y a repetir código (while, for, range). También vas a ver dos patrones que vas a usar siempre: el acumulador y el contador.

if: ejecutar algo solo si se cumple una condición

python
temperatura = 31

if temperatura > 30:
    print("Hace calor")
    print("Tomá agua")

print("Fin del pronóstico")
text
Hace calor
Tomá agua
Fin del pronóstico

La estructura es:

  • if, una condición (cualquier expresión que dé True o False) y dos puntos.
  • Abajo, el bloque: las líneas que se ejecutan si la condición es verdadera. Van indentadas con 4 espacios.
  • La primera línea sin indentación (print("Fin del pronóstico")) ya está fuera del if y se ejecuta siempre.

En Python la indentación no es decorativa: es lo que define qué líneas pertenecen al bloque. VS Code inserta 4 espacios cuando apretás Tab dentro de un archivo .py.

else y elif

else define qué hacer cuando la condición es falsa:

python
edad = 16

if edad >= 18:
    print("Puede votar de forma obligatoria")
else:
    print("Todavía no es obligatorio")
text
Todavía no es obligatorio

Cuando hay más de dos caminos, se encadenan condiciones con elif ("si no, si..."):

python
nota = 7

if nota >= 9:
    calificacion = "Sobresaliente"
elif nota >= 7:
    calificacion = "Muy bien"
elif nota >= 4:
    calificacion = "Aprobado"
else:
    calificacion = "Desaprobado"

print(calificacion)
text
Muy bien

Python evalúa las condiciones en orden y ejecuta solo el primer bloque cuya condición sea verdadera; el resto se saltea. Por eso, con nota = 7, no llega a preguntar nota >= 4 aunque también sea cierto. El orden importa: si pusieras nota >= 4 primero, un 10 diría "Aprobado".

Operadores lógicos: and, or, not

Para combinar condiciones:

OperadorEs True cuando...
a and blas dos son verdaderas
a or bal menos una es verdadera
not aa es falsa
python
edad = 25
tiene_entrada = True

if edad >= 18 and tiene_entrada:
    print("Puede pasar")

dia = "sábado"
if dia == "sábado" or dia == "domingo":
    print("Es fin de semana")

if not tiene_entrada:
    print("Comprá una entrada")
text
Puede pasar
Es fin de semana

Para preguntar si un número está en un rango, Python permite encadenar comparaciones:

python
hora = 14
if 9 <= hora < 18:
    print("Horario de atención")
text
Horario de atención

Condiciones con truthiness

Como viste en la lección 2, "", 0 y None cuentan como falsos. Eso permite escribir:

python
nombre = ""
if nombre:
    print(f"Hola, {nombre}")
else:
    print("No ingresaste un nombre")
text
No ingresaste un nombre

if nombre: se lee "si nombre tiene algo".

while: repetir mientras se cumpla una condición

while repite su bloque mientras la condición sea verdadera:

python
cuenta = 1
while cuenta <= 3:
    print(f"Vuelta {cuenta}")
    cuenta += 1
print("Listo")
text
Vuelta 1
Vuelta 2
Vuelta 3
Listo

Cada repetición se llama iteración. Antes de cada vuelta, Python evalúa la condición; cuando da False, sale del bucle y sigue con lo que viene después.

Fijate en cuenta += 1: si no cambiaras cuenta, la condición sería verdadera para siempre y el programa no terminaría nunca (un bucle infinito). Si te pasa, cortalo con Ctrl + C en la terminal.

while con input: repetir hasta que el usuario decida

while es ideal cuando no sabés de antemano cuántas veces vas a repetir. Por ejemplo, pedir una contraseña hasta que sea la correcta:

python
clave = input("Clave: ")
while clave != "python123":
    print("Incorrecta, probá de nuevo")
    clave = input("Clave: ")
print("Acceso concedido")
text
Clave: hola
Incorrecta, probá de nuevo
Clave: python123
Acceso concedido

for: recorrer una secuencia

for recorre los elementos de una secuencia, uno por uno. Un string es una secuencia de caracteres:

python
for letra in "sol":
    print(letra)
text
s
o
l

En cada vuelta, la variable letra toma el siguiente elemento. El nombre de esa variable lo elegís vos.

En la lección 4 vas a usar for para recorrer listas, que es lo más común. Por ahora, lo vamos a combinar con range.

range: secuencias de números

range genera una secuencia de enteros. Tiene tres formas:

python
for i in range(5):           # de 0 a 4
    print(i, end=" ")
print()

for i in range(1, 6):        # de 1 a 5
    print(i, end=" ")
print()

for i in range(0, 20, 5):    # de 0 a 19, de 5 en 5
    print(i, end=" ")
print()

for i in range(10, 0, -2):   # de 10 a 1, bajando de 2 en 2
    print(i, end=" ")
print()
text
0 1 2 3 4 
1 2 3 4 5 
0 5 10 15 
10 8 6 4 2 
  • range(fin): desde 0 hasta fin, sin incluir fin.
  • range(inicio, fin): desde inicio hasta fin, sin incluir fin.
  • range(inicio, fin, paso): de paso en paso. Para contar hacia atrás, el paso tiene que ser negativo (y el inicio mayor que el fin).

La regla que más confunde: el fin nunca se incluye. Si querés llegar hasta el 10, escribí range(1, 11). Una forma de recordarlo: range(5) genera exactamente 5 números.

print(..., end=" ") cambia lo que print pone al final: en vez de un salto de línea, un espacio. El print() vacío de después hace el salto.

range no arma todos los números de antemano: los va generando a medida que el for los pide. Por eso range(1_000_000) no ocupa memoria de más.

break y continue

  • break corta el bucle inmediatamente.
  • continue saltea el resto de la vuelta actual y pasa a la siguiente.
python
for n in range(1, 20):
    if n % 7 == 0:
        print(f"Primer múltiplo de 7: {n}")
        break
text
Primer múltiplo de 7: 7
python
for n in range(1, 11):
    if n % 3 == 0:
        continue
    print(n, end=" ")
print()
text
1 2 4 5 7 8 10 

Un patrón muy usado es while True con break: un bucle "infinito" que se corta desde adentro cuando se cumple algo. Es la forma natural de armar un menú:

python
while True:
    opcion = input("Escribí 'saludar' o 'salir': ")
    if opcion == "salir":
        break
    if opcion == "saludar":
        print("¡Hola!")
    else:
        print("Opción no válida")
print("Chau")
text
Escribí 'saludar' o 'salir': saludar
¡Hola!
Escribí 'saludar' o 'salir': bailar
Opción no válida
Escribí 'saludar' o 'salir': salir
Chau

Acumuladores y contadores

Dos patrones que aparecen en todos lados:

  • Un acumulador es una variable que va sumando (o multiplicando, o concatenando) valores en cada vuelta. Arranca en un valor neutro: 0 para sumar, 1 para multiplicar, "" para unir textos.
  • Un contador es una variable que suma 1 cada vez que pasa algo.

Ejemplo: sumar los múltiplos de 3 entre 1 y 30, y contar cuántos son.

python
suma = 0        # acumulador
cantidad = 0    # contador

for n in range(1, 31):
    if n % 3 == 0:
        suma += n
        cantidad += 1

print(f"Hay {cantidad} múltiplos de 3 y suman {suma}")
text
Hay 10 múltiplos de 3 y suman 165

El acumulador y el contador se inicializan antes del bucle. Si los pusieras adentro, se reiniciarían en cada vuelta.

Con while y entrada del usuario, el mismo patrón sirve para totalizar algo hasta que el usuario indique que terminó:

python
total = 0.0
compras = 0

monto = float(input("Monto (0 para terminar): "))
while monto != 0:
    total += monto
    compras += 1
    monto = float(input("Monto (0 para terminar): "))

print(f"{compras} compras, total ${total:.2f}")
text
Monto (0 para terminar): 1500
Monto (0 para terminar): 820.5
Monto (0 para terminar): 0
2 compras, total $2320.50

Un acumulador suma a medida que recorre, sin necesidad de guardar todos los valores. Eso es más simple y gasta menos memoria que guardarlos primero y sumarlos al final.

Un primer chequeo de lo que escribe el usuario

En la lección 2 viste que int("hola") da error. Los strings tienen un método llamado isdigit() que devuelve True si el texto tiene solo dígitos. (Un método es una función que se llama con un punto sobre un valor; en la lección 6 los vas a ver a fondo.) Con un while podés pedir un dato hasta que sea válido:

python
texto = input("Edad: ")
while not texto.isdigit():
    print("Ingresá solo números")
    texto = input("Edad: ")
edad = int(texto)
print(f"Tenés {edad} años")
text
Edad: veinte
Ingresá solo números
Edad: 20
Tenés 20 años

isdigit() no acepta signos ni decimales ("-3" o "2.5" dan False). En la lección 8 vas a ver una forma más completa de validar con try/except.

Errores comunes

  • IndentationError: mezclaste espacios y tabs, o una línea quedó con más o menos espacios que sus vecinas. Usá siempre 4 espacios.
  • Olvidar los dos puntos al final de if, elif, else, while o for: da SyntaxError: expected ':'.
  • Esperar que range incluya el final. range(1, 10) llega hasta 9.
  • Contar hacia atrás con paso positivo. range(10, 0) no genera nada: hace falta range(10, 0, -1).
  • Bucle infinito con while: la variable de la condición nunca cambia dentro del bucle. Cortá con Ctrl + C y revisá qué debería actualizarse.
  • Inicializar el acumulador adentro del bucle. Se reinicia en cada vuelta y al final solo tiene el último valor.
  • Comparar con =: if x = 5: es un SyntaxError. Para comparar es ==.
  • Condiciones con or mal armadas. if dia == "sábado" or "domingo": siempre es verdadero, porque "domingo" solo ya cuenta como True. Hay que repetir la comparación: dia == "sábado" or dia == "domingo".

Practicá

  1. Pedí una temperatura (número entero) y mostrá "Helada" si es menor a 0, "Frío" entre 0 y 14, "Templado" entre 15 y 24, y "Calor" de 25 en adelante.
  2. Pedí un número entre 1 y 10 y mostrá su tabla de multiplicar del 1 al 10, con el formato 7 x 3 = 21.
  3. Pedí una frase y contá cuántas vocales tiene (sin importar si son mayúsculas o minúsculas). Pista: letra in "aeiouAEIOU" es True si la letra es una vocal.
  4. Juego de adivinar: el número secreto es 37. El usuario tiene 5 intentos; después de cada intento incorrecto, decile si el secreto es mayor o menor. Si acierta, felicitalo y terminá; si se le acaban los intentos, mostrá cuál era.

Soluciones

Ejercicio 1:

python
temperatura = int(input("Temperatura: "))

if temperatura < 0:
    print("Helada")
elif temperatura < 15:
    print("Frío")
elif temperatura < 25:
    print("Templado")
else:
    print("Calor")
text
Temperatura: 18
Templado

Como las condiciones se evalúan en orden, en el segundo elif ya sabés que la temperatura es al menos 0: no hace falta escribir 0 <= temperatura < 15.

Ejercicio 2:

python
numero = int(input("Número: "))
for i in range(1, 11):
    print(f"{numero} x {i} = {numero * i}")
text
Número: 7
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70

Ejercicio 3:

python
frase = input("Frase: ")
vocales = 0
for letra in frase:
    if letra in "aeiouAEIOUáéíóúÁÉÍÓÚ":
        vocales += 1
print(f"Tiene {vocales} vocales")
text
Frase: Programar en Python
Tiene 5 vocales

Ejercicio 4:

python
secreto = 37
intentos = 5
acerto = False

while intentos > 0:
    intento = int(input("Tu número: "))
    intentos -= 1
    if intento == secreto:
        acerto = True
        break
    elif intento < secreto:
        print(f"Es mayor. Te quedan {intentos} intentos")
    else:
        print(f"Es menor. Te quedan {intentos} intentos")

if acerto:
    print("¡Adivinaste!")
else:
    print(f"Se acabaron los intentos. Era {secreto}")
text
Tu número: 50
Es menor. Te quedan 4 intentos
Tu número: 30
Es mayor. Te quedan 3 intentos
Tu número: 37
¡Adivinaste!

La variable acerto es una bandera: un booleano que recuerda si pasó algo dentro del bucle, para decidir qué hacer después.

Resumen

  • if / elif / else eligen qué bloque ejecutar; se evalúan en orden y se ejecuta solo el primero que se cumpla.
  • La indentación (4 espacios) define qué líneas pertenecen a cada bloque.
  • and, or y not combinan condiciones; 9 <= x < 18 chequea un rango.
  • while repite mientras una condición sea verdadera; for recorre los elementos de una secuencia.
  • range(inicio, fin, paso) genera enteros y nunca incluye el fin; para bajar, el paso es negativo.
  • break corta el bucle; continue pasa a la siguiente vuelta; while True + break sirve para menús.
  • Acumuladores y contadores se inicializan antes del bucle y se actualizan adentro.

← Volver al temario