2011-09-03 17 views
8

se per qualche motivo voglio ripetere la stessa iterazione come posso farlo in python?ripetere un'iterazione di per ciclo

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 

ora quando la funzione sveglia dal sonno dopo una giornata (di mercato (mercato del commercio di valuta) è aperto) voglio riprendere il mio ciclo for da eachId = 10not da eachId = 11, perché eachId = 10 non è ancora stato elaborato come market was closed ogni aiuto è molto apprezzato grazie.

+0

salvare il contenuto in un elenco. – JBernardo

+0

Penso che quello che sta chiedendo sia come non incrementare il contatore di liste 'for' su un iterazione. – bcoughlan

risposta

18

fare in questo modo:

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 

Il titolo della tua domanda è la chiave. La ripetizione di si ottiene con l'iterazione e in questo caso è possibile farlo semplicemente con uno while nidificato.

+0

grazie per l'aiuto, annidato mentre ahhh come questo non mi è venuto in mente: p –

3

Utilizzare un ciclo while?

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

E semplicemente non aumentare, se si ottiene "il mercato è chiuso".

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

Come @David aggiunto, se non è necessario acquisire response.

+0

Questo è buono a meno che la 'risposta 'non debba essere catturata. Altrimenti ciò deve essere il più vicino possibile. –

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