Разорвать петлю в Jython - PullRequest
       11

Разорвать петлю в Jython

0 голосов
/ 27 марта 2010

У меня есть записанный цикл для условия «если и», и я хочу полностью прервать цикл, если условие будет выполнено.

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

Итак, если условие if string.find выполнено, я хочу перейти к циклическому потоку. Скажите, пожалуйста, какое место лучше всего прервать, и как мне изменить программу, чтобы после выполнения условия if я вышел из цикла и снова начал цикл while.

Ответы [ 3 ]

0 голосов
/ 27 марта 2010

Ваш код уже делает это. Хотя неясно, зачем вам вложенные циклы и для чего нужны эти магические числа. Вот ваш код немного переработан для удобства чтения:

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 голосов
/ 27 марта 2010

Интересно, действительно ли вы делаете то, что намереваетесь делать с i. Может быть, вы хотите что-то вроде этого:

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 голосов
/ 27 марта 2010

Исходя из того, что вы написали, ваш код делает именно это. Поскольку цикл for является последней частью цикла while, разрыв его приведет прямо к следующей итерации цикла while.

Если у вас do есть больше кода в цикле while, который вы пропустили, то перемещение его в предложение else цикла for приведет к его выполнению, только если цикл for не прерывается:

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

Только один стилистический вопрос. Вместо того чтобы вести свой счетчик, используйте:

for i, line in enumerate(read_record):
...