Выполнение условия в цикле For - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь применить условие IF в поле For l oop, но оно здесь не работает. У меня здесь есть фрагмент кода:

for iterate in range(N):
    for rows in range(rows):
        vector1 = function1(x, rows)
        x = vector1
        vector2 = function2(z, rows)
        z = vector2
        if a <= angle_between(x, z) <= b:    
            break

Здесь «function1», «function2» и «angle_between» - все это уже определенные функции. «Function1» и «function2» вызываются одновременно в каждом l oop, и я хочу ситуации, когда ForL oop остановится на операторе If. Однако, когда я запустил свой код и проверил окончательный вывод «angle_between», он не был в диапазоне (a, b). Был ли я не прав в моей реализации здесь? Буду признателен за любое руководство, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 14 января 2020

Чтобы разорвать оба цикла изнутри внутреннего l oop без использования переменной, вы можете поместить предложение else вне внутреннего l oop и продолжать до тех пор, пока оператор if не станет истинным.

for iterate in range(N):
    for rows in range(rows):
        vector1 = function1(x, rows)
        x = vector1
        vector2 = function2(z, rows)
        z = vector2
        if a <= angle_between(x, z) <= b:    
            break
    else:
        continue
    break
0 голосов
/ 15 января 2020

Не зная значений любой из ваших переменных, того, что вы пытаетесь достичь с помощью циклов или что содержат ваши функции, трудно понять, что не так. Это может быть много вещей.

Возможно, вы не выбились из своей секунды за l oop. Возможно, в логике c вашей функции есть изъян.

Возможно также, что вы изменяете значение rows и затем повторно используете его в следующей итерации для l oop.

Пример:

rows = 5
N = 5
for iterate in range(N):
    print(rows)
    for rows in range(rows):

Первая итерация for rows in range(rows): будет равна 5. После этого цикла 5 раз значение rows будет равно 4, и он будет использовать это в следующий раз он начинает ваше внутреннее для l oop.

0 голосов
/ 14 января 2020

Ваш единственный прорыв из внутреннего l oop. Попробуйте это:

done = False
for iterate in range(N):
    for rows in range(rows):
        vector1 = function1(x, rows)
        x = vector1
        vector2 = function2(z, rows)
        z = vector2
        if a <= angle_between(x, z) <= b:    
            done = True
            break
    if done:
        break
...