2010-03-27 7 views
0

J'ai écrit une boucle pour et si la condition et je veux casser pour boucler complètement quand si satisfait.Briser la boucle dans Jython

while count: 
    i=0 
    for line in read_record: 
     #print str.strip(count[1:28]) 
     #print str.strip(read_record[i]) 
     if string.find(str.strip(read_record[i]),str.strip(count[1:28]))>0: 
      code=str.strip(read_record[i+19])+str.strip(read_record[i+20]) 
      print code[25:] 
      break 

     i=i+1 

Voici donc si la condition if string.find se satisfait Je veux aller en courant en boucle. S'il vous plaît dites-moi quel sera le meilleur endroit pour casser et comment dois-je modifier le programme de sorte qu'une fois la condition if est satisfaite, je suis hors de la boucle et recommence avec while loop.

Répondre

0

Votre code le fait déjà. Bien qu'il ne soit pas clair pourquoi avez-vous besoin de boucles imbriquées et à quoi servent ces nombres magiques. Voici votre code refactorisé un peu pour une meilleure lisibilité:

while count: # while len(count) > 0 
    for i, record in enumerate(read_record):   
     if count[1:28].strip() in record: 
      code= ''.join(map(str.strip, read_record[i+19:i+21])) 
      print code[25:] 
      break 
    else: 
     # no break occurred 
     pass 
+0

Merci ça a marché – kdev

0

D'après ce que vous avez écrit, c'est exactement ce que votre code fait. Comme la boucle for est la dernière partie de la boucle while, la rupture ira directement à l'itération suivante de la boucle while.

Si vous faire ont plus de code dans la boucle while que vous avez omis, puis de passer dans la clause d'autre de la boucle lui fera fonctionner que si la boucle ne rompt pas:

for i in someit: 
    ... 
else: 
    print 'for loop did not break' 

Juste un problème stylistique cependant. Au lieu de gérer votre propre compteur, utilisez:

for i, line in enumerate(read_record): 
0

Je me demande si vous faites vraiment ce que vous comptez avec i. Peut-être que vous voulez quelque chose comme ceci:

while count: 
    for line in read_record: 
     if str.strip(count[1:28]) in read_record: 
      code=str.strip(read_record[:20])+str.strip(read_record[20:]) 
      print code[25:] 
      break 
+0

Merci, il m'a aidé – kdev