@Name_Zagotovka

Как прервать многоуровневый цикл for?

есть многоуровневый цикл for.
задача: на "нижнем" уровне при выполнении условия прервать работу цикла.
Пример:
a1=10
a2=20
a3=30
a4=40
string =[a1,a2,a3,a4]
a11=101
a22=202
a33=303
a44=404
string1 =[a11,a22,a33,a44]

print('perebor x start')
for x in string:
    print('x = '+str(x))
    print('perebor y pri x = ' + str(x)+' START')
    for y in string1:
        print('y = '+str(y))
        if x+y==333:
            print('yslovie +. prerivanie')
            break
            break

Есть два массива чисел, нужно сложить каждое числа из первого, с каждым из второго. Если сумма равно 333. останавливаемся...
"Первый брейк" отрабатывает корректно, и цикл
for y in string1:
останавливается....однако цикл "верхнего" уровня продолжает отрабатывать...
при исполнении выглядит это вот так
x = 10
perebor y pri x = 10 START
y = 101
y = 202
y = 303
y = 404
x = 20
perebor y pri x = 20 START
y = 101
y = 202
y = 303
y = 404
x = 30
perebor y pri x = 30 START
y = 101
y = 202
y = 303
yslovie +. prerivanie тут должны циклы (оба-два) вообще закончиться, но...
x = 40
perebor y pri x = 40 START
y = 101
y = 202
y = 303
y = 404


Кто знает как прервать циклы подобного рода. Или есть иные варианты(команды тире функции)?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@Name_Zagotovka Автор вопроса
Спасибо добрым людям.
Варик 1
Делаем ключ внутри функции и относительно его "пляшем"
for x in string:
    if chek==1:
        break
    print('x = '+str(x))
    print('perebor y pri x = ' + str(x)+' START')
    for y in string1:
        print('y = '+str(y))
        if x+y==333:
            chek=1
            print('yslovie +. prerivanie')
            break    
        else:
            chek=0

Варик 2
Делаем отдельную функцию, если условие выполняется то вызываем прерывание
def ff1(x):
    for y in string1:
        print('y = '+str(y))
        if x+y==333:
            print('yslovie +. prerivanie')
            return(1)
for x in string:
    print('x = '+str(x))
    print('perebor y pri x = ' + str(x)+' START')
    if ff1(x)==1:
        break
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@xDimus
Добавить ключ в условие и по нему делать break во втором цикле
Ответ написан
@bacon
1. завернуть в функцию и сделать return
2. возбудить исключение
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы