Control de flujo de programas

Bueno, al fin y al cabo llegamos al punto fundamental de la programación. Sin fors o ifs, los programas no son nada más que órdenes ejecutadas secuencialmente una después de la otra. Con los loops y las condiciones, uno puede ejecutar bloques de código sólo si ciertas condiciones son verdadres o se cumplen, o podemos ejecutar código "para siempre!

Hoy vamos a cubrir los "condicionales" (incluyendo if, elif y else), los "loops" (he escuchado varias traducciones de "loop" pero ninguna me gusta), incluyendo for, while y algunos términos asociados como break, continue y pass.

Condicionales: if-elif-else

Los condicionales, a veces también llamados if-then, permite que ejecutemos sólo ciertas partes de código dependiendo en alguna condición booleana (T o F). Por ejemplo:


In [2]:
x = -15

if x == 0:
    print(x, "es cero")
elif x > 0:
    print(x, "es positivo")
elif x < 0:
    print(x, "es negativo")
else:
    print(x, "es algo que ni idea...")


-15 es negativo

Noten en particular los dos puntos (:) y el espacio para definir los bloques de código. Las instrucciones if-then están en casi todos los lenguajes. Python tambien tiene elif que es una contracción de else if. Los bloques else if son opcionales y pueden incluir todos los que quieran.

Loops (ciclos??)

Los loops en Python son una manera de ejecutar código repetidamente. Supongamos que queremos imprimir todos los elementos de una lista:


In [4]:
for N in [2, 3, 5, 7]:
    print(N, end=' ') # imprimir todos en una misma linea


2 3 5 7 

Fíjense las partes del loop: el for, una variable N para mantener estado, el operador de membresía in y la lista misma. Es casi lenguaje natural. En particular, a la derecha (donde está la lista) puede ser cualquier iterador (un objeto que podamos "recorrer"), ver aqui.


In [6]:
for c in "python":
    print(c)


p
y
t
h
o
n

Uno de los iteradores más comunes de Python es el objeto range(), que genera una secuencia de números.


In [7]:
for i in range(10):
    print(i, end=' ')


0 1 2 3 4 5 6 7 8 9 

Noten que siempre las iteraciones empiezan con 0 y que por convención el último elemento del objeto no se incluye (el número "10" en este caso). El objeto range puede tomar secuencias (rangos, por eso el nombre) más complicados, por ejemplo:


In [9]:
# range de 5 a 10
list(range(5, 10))


Out[9]:
[5, 6, 7, 8, 9]

In [8]:
# range de 0 a 10 de a 2
list(range(0, 10, 2))


Out[8]:
[0, 2, 4, 6, 8]

El objeto raneg() produce un iterable.

Ciclos while

El otro tipo de ciclo en Python es el while, que "itera" hasta que alguna condición booleana se cumpla.


In [10]:
i = 0
while i < 10:
    print(i, end=' ')
    i += 1


0 1 2 3 4 5 6 7 8 9 

break y continue

  • break salta fuera del loop completamente
  • continue se salta lo que queda de la iteración y vuelve al for

In [11]:
for n in range(20):
    # si el resto es 0, salte lo que queda de la iteración
    if n % 2 == 0:
        continue
    print(n, end=' ')


1 3 5 7 9 11 13 15 17 19 

Por ejemplo while(True) loops para siempre! Se les ocurre un ejemplo de esto?