#!/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-loopsPython 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
yieldsaca 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 : breakEs posible crear bucles infinitos usando for, pero es
necesario hacer uso de iteradores. Este sería un posible ejemplo:
for _ in iter (int,1):
comandositer 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):
comandosO usando lambdas
for _ iter (lambda : 0, 1):
comandosResumen
- Python ofrece bucles
forywhile - Python ofrece
breakycontinuepara controlar el flujo de los bucles
■
