Ciclo o bucle for in en python

for en python
Ciclo o bucle for in en python

Hoy vamos a ver de que trata el ciclo for in en python. En la sección Tutorial Python iré dejando todas las entradas que resulten necesarias para iniciarse con este maravilloso lenguaje de programación.

La sentencia for .. in es una sentencia de bucle (también llamada ciclo) que se repite en una secuencia de objetos, es decir, a través de cada elemento de una secuencia (listas o cadenas), en el orden con el que aparecen en la secuencia.

Vamos a ver algunos ejemplos para que nos quede bien claro. 

Listas

»»»#Midiendo cadenas de una lista:
»»»palabras = ["hola", "python", "pythondiario"]
»»»for i in palabras:
. . .     print i, len(i)
. . .
hola 4
python 6
pythondiario 12

Otro ejemplo:
#! /usr/bin/env python
# -*- coding: utf-8 -*-

for i in range (1, 5):
    print i
else:
    print "El ciclo se termino"

En este programa estamos imprimiendo una secuencia de números. El rango (1, 5) nos da una secuencia [1, 2, 3, 4], el bucle itera sobre esta secuencia y a continuación ejecuta el bloque de instrucciones para cada valor de i (en este caso print i).
Recordar que la parte else es opcional, en este caso se pone para ver el final del ciclo.

Cadenas

#! /usr/bin/env python
# -*- coding: utf-8 -*-

for letra in "pythondiario":
    print "Letra actual: ", letra

En este programa iteramos sobre cada letra de "pythondiario" e imprimimos la letra luego de la cadena "Letra acual: ".

Ejemplo de ciclo for anidado: #Un for dentro de otro

#! /usr/bin/env python
# -*- coding: utf-8 -*-

for num in range (10,20):  #para iterar entre 10 y 20
   for i in range (2,num): #para iterar sobre los factores de num
      if num%i == 0:      #determina el primer factor
         j=num/i          #calcula el factor del segundo
         print '%d es igual a: %d * %d' % (num,i,j)
         break #termina el ciclo del segundo for y vuelve al primero para seguir
iterando
     else:                  # parte else del bucle
      print num, 'es un numero primo'

Voy a explicar el primer numero a iterar:
En el primer for, num va a tener como primer valor el numero 10.
num = 10 #Iterando en el rango (10, 20)
Luego el programa salta al segundo for, donde el primer valor de i va a ser 2.
i = 2 #en este caso donde num = 10, i va a valer(2, 3, 4, 5, 6, 7, 8, 9).
Luego viene el condicional if que nos dice: si el resto de dividir num entre i (10 % 2) == 0 (en este caso lo es) va a guardar en j el resultado de dividir 10 / 2.
Si el resto de num % i (10 % 2) es distinto de 0, el condicional if es falso por lo tanto vuelve al segundo for para convertir a i en 3, y así hasta llegar a num. Si ningún numero del segundo for hace cumplir la condición, termina el segundo for y salta al else para decirnos que es un numero primo. Ahora el programa salta al primer for para convertir num en 11 y asi hasta el 19.

Puede resultar un poco engorroso las primeras veces que utilizamos los for anidados, pero una ves que agarremos la onda no vamos a para de usarlos 🙂

No olviden dejar sus comentarios ante cualquier duda o sugerencia sobre bucle for python...

  1. greg_dorian dice:

    hola como puedo transcribir este codigo de c++ a python
    for (int i = 0; i < R; ++i)

    1. PythonDiario dice:

      Hola, puedes hacerlo de esta manera:

      R = 10

      for i in range(0, R, 1):
      ----print i

      Saludos

    2. Alberto dice:

      >>> R=10
      >>> for i in range(0,R,1):
      ... print (i)
      File "", line 2
      print (i)
      ^
      Me sale ese error con o sin paréntesis, uso python 3.
      ¡Saludos!

    3. PythonDiario dice:

      Lo he probado con python 3 y me ha funcionado. Si estas trabajando con el shell interactivo acuérdate de dejar la sangría de 4 espacios en la linea: print (i).
      Saludos

    4. Anónimo dice:

      Prueba con
      >>> R=10
      >>> for i in range(0,R,1):
      ... print ("",i)

  2. Unknown dice:

    hola como va como se puede recorrer un vector x de atrás hacia adelante!!! he imprimir sus datos.. en python gracias!!!!

    1. PythonDiario dice:

      Hola Lisandro, hay un metodo llamado reverse() que te puede ayudar, te dejo un ejemplo:

      >>>x = [1, 2, 3, 4]
      >>>x.reverse()
      >>>x
      [4, 3, 2, 1]

      Espero te sirva, saludos.

  3. Unknown dice:

    hola como hago para cargar un numero ejemplo 6 en un vector y que me guarde así.
    0,1,2,3,4,5... o así 1,2,3,4,5,6.. gracias... un valor por posición del vector.. gracias..

  4. Anónimo dice:

    Este comentario ha sido eliminado por un administrador del blog.

  5. Anónimo dice:

    HOLA, si tengo un vector A=[4,2,5,6,1]
    como voy sumando las posiciones para almacenarlas en otro vector, es decir sumar 4+2+5=11, 2+5+6=13, 5+6+1=12
    B=[11,13,12]

    GRACIAS

  6. Anónimo dice:

    Una agencia de modelos solicita nuevos candidatos para incorporar a la empresa. No especifica ningún requisito. Los datos que se cargan son: nombre, sexo, altura, color de ojos y color de cabello. El alta de datos finaliza cuando en vez del nombre se ingresa la palabra fin. Una vez terminada la carga se almacenan por un lado las personas cuya altura esté entre 1.70 y 1.80 y se cuentan las mujeres rubias de ojos verdes. Finalmente se muestran los nombres y el promedio de altura del primer grupo y la cantidad de personas del segundo grupo.

    personas: juan-m-1.78-marrón-castaño/pedro-m-1.68-marrón-castaño/julia-f-1.71-verde-rubio/ana-f-1.65-verde-rubio/josé-m-1.90-verde-rubio/camila-f-1.73-verde-rubio/laura-f-1.63-verde-rubio/sara-f-1.69-celeste-rubia

    Si bien es obligatorio programar la carga, a los fines de la prueba de escritorio pueden copiar y pegar los datos suministrados, siempre considerando que es un ejemplo y no los únicos datos posibles. Además, se aclara que el formato de entrada y almacenamiento de los datos tampoco debe ser el que se muestra aquí, pueden usar las estructuras que les sean más cómodas.

    La salida que se muestre por pantalla, será como la siguiente (esto en el caso de usar los datos suministrados):

    La altura promedio del primer grupo es: 1.74 y sus nombres son juan julia camila
    La cantidad de personas del segundo grupo es: 4

    necesito ayuda

  7. JFN Sistemas Digitales dice:

    hola estoy trabajando con arduino y el monitor serie, quiero mostrar los datos del monitor en un archivo.txt, logre hacerlo pero no se como hacer para que se ejecute constantemente y siempre muestre el valor en una sola linea hasta ahora tengo esto
    import serial

    addr = 'COM5'
    baud = 9600
    fname = 'accel.txt'
    fmode = 'wb'
    reps = 11

    with serial.Serial(addr,baud) as port, open(fname,fmode) as outf:
    for i in range(reps):
    x = port.read(size=2)
    print x
    outf.write(x)
    outf.flush()

    Se entiende lo que necesito hacer, saludos y espero que alguien me pueda guiar

  8. Anónimo dice:

    hola ya entendi el proceso pero si quiero que salga 1 despues desaparezca el 1 y aparezca el 2 y asi...tengo los comandos pero no se como lo puedo meter
    ejemplo:
    soy windows
    import os
    for i in range(1,3)
    pero quiero usar el os.system("cls")
    que saliera asi mas o menos pero con estos comandos
    1
    os.system("cls")
    2
    os.system("cls")
    3

    1. PythonDiario dice:

      Puedes probar con algo de esto:

      import os
      import time

      for i in range(3):
      print i
      time.sleep(2)
      os.system("cls")

      Me comentas, Saludos...

  9. Anónimo dice:

    Hola, ¿cómo puedo hacer una función que sustituya los bucles anidados?

  10. Unknown dice:

    Solicite los nombres de diez personas y guárdelos en una
    lista.
    Una vez que tenga la lista con los 10 nombres:
    • Los nombres deben aparecer solo una vez (Eliminar
    repetidos)
    • Muestre un mensaje de saludo a las personas que
    quedaron en la lista, en el orden contrario que fueron
    ingresados (Del ultimo al primero)
    ayuda por favor

  11. Unknown dice:

    Solicite los nombres de diez personas y guárdelos en una
    lista.
    Una vez que tenga la lista con los 10 nombres:
    • Los nombres deben aparecer solo una vez (Eliminar
    repetidos)
    • Muestre un mensaje de saludo a las personas que
    quedaron en la lista, en el orden contrario que fueron
    ingresados (Del ultimo al primero)
    ayuda por favor

    1. PythonDiario dice:

      Hola Tifany, gracias por visitar el blog. Has escrito algo de código así podemos verlo y ayudarte? Saludos

  12. Anónimo dice:

    Cree un programa en Python 3.4 que le solicite al usuario un número entero, como resultado muestre en la pantalla los números enteros desde 0 (inclusive) hasta el número ingresado y el número al cuadrado. El programa debe mostrar como resultado exclusivamente los valores solicitados , no debe contener letras ni enunciados que lo acompañen

    me pueden ayudar con este ejercicio???? graciass

    1. PythonDiario dice:

      Hola, has podido hacer algo tu solo del ejercicios? puedes publicar lo que has echo y te podría ayudar. Saludos!!!

    2. Anónimo dice:

      Gracias.
      se trata de un ejercicio utilizando ciclo for. aquí un ejemplo de como debe resultar el ejercicio:
      si el usuario ingresa 3 el programa debe mostrar:

      0
      0
      1
      1
      2
      3
      9
      By: JULIO CESAR

    3. Anónimo dice:

      lo que e podido hacer es:
      Numero = int(input())
      print (0,Numero)
      print (Numero**2)

      pero me sale mal, me dice que tengo algo mal y que me hace falta.
      By: JULIO CESAR

  13. Unknown dice:

    Hola, hay una función que realice la conversión de ascii a decimal por ejemplo.. ya hice la conversación de la palabra hola a ascii h en ascii es 72 ese debe ser convertido a decimal. Alguien sabe como se hace?

  14. Anónimo dice:

    Hola buenas noches alguien me puede decir cómo se puede traducir esté pedazo de código en Python:
    Int n
    For (int i=0; i<n; i++){
    Sistema.out.println("introduce la cantidad de empleado a registrar")
    }
    Se los agradecería mucho gracias

  15. Unknown dice:

    Como salir de un for infinito sin break!!!!!

    1. PythonDiario dice:

      Un ciclo cuya condición es True parece ser un ciclo infinito (o sea que nunca va a terminar). ¡Pero eso es gravísimo! ¡Nuestros programas tienen que terminar!

      Puedes probar con:

      import time

      try:
      while True:
      print "Mi Diario Python"
      time.sleep(5)
      except KeyboardInterrupt:
      print 'Se interrumpio!'

      Luego presionar CTR + C

      Saludos, Diego

  16. Unknown dice:

    nx=5
    ny=3
    cadena=[[0]*nx]*ny
    for i in range(ny):
    for j in range (nx):
    cadena[i][j]=i+ny*j
    print(cadena[i][j], i,j)
    print (cadena)
    aux=[[0]*ny]*nx
    for i in range(nx):
    for j in range(ny):
    aux[i][j]=cadena[j][i]
    print(aux)

    =======
    si cambio de c++ a python no funcina igual 🙁

  17. Unknown dice:

    Este comentario ha sido eliminado por el autor.

  18. Anónimo dice:

    Y si quiero hacer una serie (1,2,4,8,16,32...) ?

  19. Unknown dice:

    Buen dia, agradeceria su ayuda en este codigo:

    import numpy as np
    from matplotlib import pyplot as plt
    import math
    #from sympy.abc import t, n

    ## LECTURA DE LOS VALORES DEL RADIO NORMALIZADO

    radioN0=[]
    N0=open('radioNorm0.txt','r')
    captura=[]

    #serie=0
    r0=open('radio2.txt','w')

    for z in N0:
    i=float(z)
    radioN0.append(z)
    r0.write(str(z)+'n')

    ser=open('serie123.txt','w')

    armonicos = 10

    for i in range(0, armonicos + 1):
    for d in N0:
    #k=float(serie)
    #q=float(d)
    serie = d*((math.cos((2*i*math.pi)/armonicos))-j*(math.sin((2*i*math.pi)/armonicos)))
    captura.append(serie)
    ser.write(str(serie)+'n')

    ser.close()
    print(captura)

    En radioN0 se me muestran los valores correspondientes, pero el la variable SERIES, no me imprime nada. Alguna sugerencia?

  20. Anónimo dice:

    ¿Alguien sabe si con un ciclo return se puede volver al inicio de un programa?

    ¿Como se haría?

  21. Anónimo dice:

    Buenas alguien podria ayudarme....
    Escriba una programa que le pida una palabra de 5 letras al usuario y la muestre de manera vertical y en mayúsculas. Si la palabra contiene alguna vocal, debe reemplazarla por un *. Nota: Utilizar un solo print.

    ejemplo: perro
    P
    *
    R
    R
    *

    tengo esto pero no me da lo que requiero:
    palabras= input("Introduce una palabra de 5 letras: ")

    for i in range(0,len(palabras)):
    if palabras[i] in ['a','e','i','o','u']:
    palabras = palabras.replace(palabras[i], '*')
    print(palabras[i].upper())

  22. TheMisteriX1 dice:

    hola tengo un problema. necesito iterar sobre una patente (3 letras y 3 numeros) para controlar de a las 3 primeras sean letras, siendo que la patente se ingresa por teclado y las letras estan definidads en la tupla (l = 'ABCDEFGHIJKMNLOPQRSTUVWXYZ'. Utilizo un for i in range(len(patente)) y de bajo de eso agrego la condicion, if i in l ( que era la tupla de letras) . Cuando lo pongo a correr me tira el siguiente error: 'str' object cannot be interpreted as an integer.
    creo q es porque no puedo iterar sobre numeros y letras, pero no se de q forma puedo hacer q me tome validas las letras y los numeros

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey