Bucles en Python
SOLUCIONARIO
Bucles en Python
2025-04-06
Por
Occam's Razor

#!/usr/bin/python
import sys

a= []
for i in range(0,10):
    a.append(i + 10)

i = 0

while (i < 10):
    print i, " -> ", a[i]
    i += 1

print "---------------------------"

while (i > 0):
    i -= 1
    sys.stdout.write (str(i) +  " -> " +  str(a[i]))
    if (i > 4):
        print 
        continue
    print " **"
    if (i == 1):
        break

print "---------------------------"

for i in a:
    sys.stdout.write (str(i) + " ");
else:
    print

print "---------------------------"
[sys.stdout.write (str(x)+" ") for x in a if (x < 15)]
print

# http://blog.teamtreehouse.com/python-single-line-loops

Python nos ofrece bucles for y while y los típicos break y continue, para salir del bucle o saltar el resto del bloque a la siguiente iteración. Los bucles for, a diferencia de lo que ocurre en lenguajes como C o Perl, no son una versión comprimida de while, sino que solo permiten iterar sobre una secuencia. Para utilizarlos en la forma clásica (iterar sobre un contador) deberemos generar una secuencia utilizando la función range por ejemplo.

Una particularidad de los bucles en Python es que nos permiten definir un bloque else, el cual se ejecutará cuando no se cumpla la condición del bucle. Este constructor es especialmente útil para determinar si el bucle se ejecutó por completo o se terminó prematuramente debido a una instrucción break dentro del bucle. En ese caso, el bloque else se ejecutará cuando el bucle termine normalmente y no prematuramente por el uso de break.

Finalmente, Python nos ofrece algo llamado List Comprehension que la verdad no se muy bien como traducir. List Comprehensions nos permiten crear listas de forma fácil generando los elementos de la lista en una especie de bucle. Por ello, en ciertas ocasiones pueden ser utilizadas para escribir pequeños bucles en una sola línea como podemos ver al final del programa:

[sys.stdout.write (str(x)+" ") for x in a if (x < 15)]

El condicional solo es necesario si nos hace falta. La siguiente línea, por ejemplo, suma 10 a todos los valores de la lista:

a = [x+10 for x in a]

Que es una forma más corta de escribir:

a = list(map(lambda x: x+10, a))

SABÍAS QUE

Puedes generar tus propios iteradores usando la palabra clave yield. Aquí un ejemplo para generar series geométricas:

#!/usr/bin/env python3

def sg(x0,r,it):
    x = x_ = x0
    for i in range (0,it):
        yield x
        x = x_ *r
        x_ = x
    
[print (x) for x in sg(2,2,10)]

Básicamente, en cada vuelta del bucle del iterador, el comando yield saca fuera el valor mientras continua con su propio bucle.

En Python podemos crear bucles infinitos utilizando un bucle while con la condición True. En caso de ser necesario salir del bucle, utilizaremos break.

while true:
    # Comandos
    if condicion : break

Es posible crear bucles infinitos usando for, pero es necesario hacer uso de iteradores. Este sería un posible ejemplo:

for _ in iter (int,1):
    comandos

iter genera un iterador. Cuando es ejecutado con dos parámetros, el primero es un objeto que se puede ejecutar y el segundo es un valor de guarda que indicará cuando el iterador termine. int cuando se utiliza como lo que Python llama un callable (algo que se puede llamar/invocar), siempre devuelve 0. Puesto que valor de guarda es 1, el iterador no parará nunca, ejecutando un bucle infinitos. En otras palabras, el código anterior se puede ver como:

def f:
    return 0
for _ iter(f, 1):
    comandos

O usando lambdas

for _ iter (lambda : 0, 1):
    comandos

Resumen

  • Python ofrece bucles for y while
  • Python ofrece break y continue para controlar el flujo de los bucles

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)