Apuntes sobre Python: Control de flujo

Condicionales If, elif, else

Permite añadir expresiones lógicas y/o relacionales para modificar el flujo del programa. Permitiendo modificar el comportamiento del mismo.

if(1 == 1):
    print('Estamos dentro!')
else:
    print('Nunca me voy a ejecutar, pues 1 es siempre 1')
cosa = 1 # Imaginemos que este valor nos lleva por tecladoif(cosa):
    print('Cosa es True, ya que un valor diferente de cero siempre será verdadero')
else:
    print('Cosa contiene %s como valor' % valor)
# Asignación múltiple. Simplemente lo hago así para que veáis otra manera de asignar variablesnombre, edad, telefono, trabaja = 'Marta', 27, 666666666, Falseif(edad >= 18 and not trabaja):    print('Debemos contratar a %s, ya que está parada!' % nombre)elif(not trabaja)
    print('%s es menor de edad y no trabajar' % nombre)
else:
    print('%s es mayor de edad y trabaja, enorabuena!' % nombre)

Bucles while y for

Con los bucles podemos ejecutar conjuntos de sentencias de manera reiterativa hasta que cierta condición sea incumplida.

While

Permite evaluar sentencias que devolverían un valor booleano. En el momento que la sentencia retorne False, el bucle finalizará.

# Se repetirá constantemente hasta respuesta tenga un valor.
respuesta = None
while(not respuesta):
 respuesta = input('Falta mucho?')

For

Con el bucle de tipo for se puede iterar de una manera más limpia que con while, debido a que está preparado para trabajar con listas.

valores = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]for valor in valores:    print(valor)

El ejemplo iterará por cada elemento de ‘valores’ y almacenará el valor de cada iteración sobre la variable ‘valor’ hasta finalizar la lista.

Cuando for se ejecuta, crea una copia de la lista para la iteración, por lo que si intentamos realizar alguna modificación sobre la lista iterada no estaremos modificando realmente la lista. Si deseamos realizar modificaciones sobre la propia lista, deberemos hacerlo asignando a la lista un valor mediante el uso de un índice. Por ejemplo:

valores = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]
index = 0
for valor in valores:
    valor[index] += 1
    index += 1

Así, habremos modificado todos los valores de ‘valores’ gracias al apuntar a los valores de la lista.

También podríamos iterar sobre cadenas de texto, solo que en este caso en vez de recorrer las posiciones de una lista, recorrerá las posiciones de la cadena.

salida = ''
cadena = 'esto es una cadena'
for c in cadena:
 salida += c
print('la salida es "%s", y la cadena era "%s", ¡Que ejemplo más tonto! :D' % (salida, cadena))

La función enumerate, la vorágine entre los bucles…

enumerate es una función propia del lenguaje de Python que al pasarle una lista nos devuelve una lista de tuplas con el formato (índice, valor). Lo explicamos con un ejemplo:

valores = [1,2,3,4,5,6,7,8,9,]
for i, v in enumerate(valores):
 v[i] = v + 1
 
print(valores)  # 'valores' habrá incrementado todos sus valores en uno.

La función range, la manera simple de iterar ‘n’ veces…

La función range espera recibir como parámetro un integer y devolverá una lista de tantos elementos como el parámetro de entrada. De esta forma podremos realizar iteraciones limitadas por un valor numérico.

# Mostrará los valores del 0 al 9, ya que ejecutará el bucle 10 veces.
for i in range(10):    print(1)

 

Y para acabar…

Lo que voy a comentar se aplica tanto para while como para for.

Es posible añadir a los bucles la instrucción final else.

else se ejecutará solo si el bucle ha finalizado satisfactoriamente o si no ha llegado a entrar nunca. En otras palabras, nunca será ejecutado si ha entrado en el bucle y se ha producido un break.

while True:
    break
else: 
    print('no me ejecuto porque he sido brakeada')
print('fin')
# En este ejemplo, solo se ejecutaría el print 'fin'

while False:
    print('Esto es un ejemplo malo')
else:
    print('me lees')
print('fin')
# En este otro ejemplo, no entraría en el bucle, se ejecutaría el bloque else (mostrando 'me lees') y finalizaría mostrando el texto 'fin'