2011-09-03 18 views
8

si por alguna razón quiero repetir la misma iteración de cómo puedo hacerlo en python?repite una iteración de for loop

for eachId in listOfIds: 
    #assume here that eachId conatins 10 
    response = makeRequest(eachId) #assume that makeRequest function request to a url by using this id 
    if response == 'market is closed': 
     time.sleep(24*60*60) #sleep for one day 

ahora, cuando la estela función del sueño después de un día (de mercado (mercado de comercio de divisas) está abierto) Quiero retomar mi bucle de eachId = 10not de eachId = 11, porque eachId = 10 aún no se ha procesado como market was closed , cualquier ayuda es muy apreciada gracias.

+0

guarde el contenido en una lista. – JBernardo

+0

Creo que lo que está preguntando es cómo no incrementar el contador de la lista de bucles 'for' en una iteración. – bcoughlan

Respuesta

18

hacerlo de esta manera:

for eachId in listOfIds: 
    successful = False 
    while not successful:   
     response = makeRequest(eachId) 
     if response == 'market is closed': 
      time.sleep(24*60*60) #sleep for one day 
     else: 
      successful = True 

El título de tu pregunta es la clave. La repetición de se logra por iteración, y en este caso puede hacerlo simplemente con un while anidado.

+0

gracias por la ayuda, anidado mientras ahhh cómo esto no me vino a la mente: p –

3

¿Usa un lazo while?

counter = 0 
while counter < len(listOfIds): 
    # do processing 
    counter = counter + 1 

Y simplemente no incremente, si obtiene 'market is closed'.

0
for eachId in listOfIds: 
    while makeRequest(eachId) == 'market is closed': 
     time.sleep(24*60*60) #sleep for one day 

As @David agregado, si no necesita capturar response.

+0

Esto es bueno a menos que la 'respuesta' necesite ser capturada. De lo contrario, esto debe ser lo más conciso posible. –

0
i = 0 
while i < len(listOfIds): 
    eachId = listOfIds[i] 
    #assume here that eachId conatins 10 
    response = makeRequest(eachId) #assume that makeRequest function request to a url by using this id 
    if response == 'market is closed': 
     time.sleep(24*60*60) #sleep for one day 
    else: 
     i += 1