Поток управления в Python: перерыв и продолжение

Python
Поток управления в Python: перерыв и продолжение

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

Ранее я представил for, if, присваивание и другие связанные операторы в Python Два потока управления в Python, представленные в этой статье: break и continue

Прежде всего, из буквального значения английских слов мы можем просто понять следующие два:

  • перерыв, значение прерывания, в коде выражается как прерывание работы следующего кода
  • continue, значение continue, отражается в коде как продолжение работы следующего кода

Во-вторых, мы должны понимать, что обавне цикламожет использоваться в циклах for и while, но область действия различна.

В этой статье в основном объясняются два основных момента знаний:

  • операторы break и continue
  • Влияние отступов на блоки кода

python

функция диапазона

Функция range(m,n,s) ​​в следующих примерах означает взять в качестве итератора значение указанного диапазона значений:

  • m: начальная позиция, целое число; по умолчанию начинается с 0 и может быть доведено до m; может быть опущено
  • n: позиция завершения, целое число, должно быть, n не может быть получено, не может быть опущено
  • s: размер шага, длина каждой выборки; может быть положительной или отрицательной.

Следующие примеры иллюстрируют:

Один уровень для разрыва цикла

Пример 1:

for i in range(8):  # i=0,1,2....7
    if i == 5:  # 当i等于5的时候执行break操作
        break
    print(i)
    
# 结果
0
1
2
3
4

Как объяснить приведенные выше результаты?

  • Когда i=0, введите if, не равное 5, не выполняйте break, печатайте напрямую и выводите 0 в это время
  • По той же причине i=1,2,3,4 - это одни и те же операции
  • Когда i=5 входит в оператор if, находит i=5, выполняет break и выходит из всего цикла, следующие i=6, 7 не будут выполняться

См. пример 2 (только без отступа):

for i in range(8):   # i=0,1,2....7
    if i == 5:
        break
print(i)

# 结果
5

Этот пример иллюстрирует влияние отступов на выполнение кода:

  • Если i=0, если не равно 5, не выполнять break, войти в следующий цикл, т.е. i=1
  • Точно так же при i=1, 2, 3 и 4, если не равно 5, break не выполняется.
  • Когда i=5 входит в if, оно оказывается равным 5, и выполняется оператор break, чтобы выйти из всего цикла.В это время i равно 5, а print(i) равно 5.

Пример 3:

Результат этого примера объясняется так же, как в примере 1, за исключением того, что итератор функции диапазона заменен строкой:

for i in "python":
    if i == "o":
        break
    print(i)
    
# 结果
p
y
t
h

Эти три примера, связанные с разрывом, показывают, что при выполнении условия разрыва весь цикл for будет выброшен; конечно, это только для одноуровневого цикла.

Один уровень для цикла - продолжить

Пример 4:

for i in range(8):  # i=0,1,2....7
    if i == 5:
        continue
    print(i)
    
# 结果
0
1
2
3
4
6
7

Объясните приведенные выше результаты:

  • Когда i=0 входит в цикл if, если не равно 5, не выполнять continue, выполнить print(i), вывести 0, войти в следующий цикл
  • Когда i=1, 2, 3 и 4 входят в цикл if, все они имеют одинаковый эффект и выполняют оператор print(i)
  • Когда i=5 входит в цикл if, просто i равно 5, выполнить continue, выйти из print(i) в это время, то есть не печатать 5; напрямую войти в следующий цикл с самого начала
  • Когда i=6, 7, интерпретация такая же, как и для i=0, 1, 2, 3, 4.

Что делать, если оператор печати не имеет отступа? См. пример 5:

for i in range(8):
    if i == 5:
        continue
print(i)

# 结果
7

Как видно из результатов примера 5 выше, последний i равен 7; когда наш оператор печати не имеет отступа, он будет выполнен только тогда, когда оператор for полностью выполнится, поэтому он не будет напечатан до последнего я=7 .

Пример 6:

for i in ["语文","数学","英语"]:
    if i != "数学":
        continue
    print(i)
    
# 结果
数学

Интерпретация результатов выше:

  • i — это «язык», введите оператор if в первый раз, i не равно математике, выполните continue и не будете выполнять print; введите следующий цикл
  • Во второй раз я беру значение "математика", ввожу в if, не удовлетворяю условию if, поэтому не выполняю continue, выполняю print и распечатываю "математику"
  • Следующий «английский» удовлетворяет условию if и выскакивает прямо для продолжения

Приведенные выше три примера, связанные с continue, иллюстрируют: когда выполняются условия оператора continue, текущий не будет выполнен, но это не повлияет на выполнение последующих операторов.

Гауссово суммирование

Пример 7:

sum = 0  # 和的初始值

for i in range(1,101):
    if i % 2 == 0:  # i除以2的余数为0,即i是偶数
        break
    sum += i  # sum = sum + i
print(sum)
   
# 结果
1

Интерпретация результатов выше:

  • Когда i = 1 входит в if, условие if не выполняется, и выполняется оператор sum += i. В это время sum становится 1, а i становится 2 и входит в следующий цикл.
  • При i=2 входит if, если выполняется условие четного числа, выполнить break, и сразу выйти из всего цикла, а следующая sum+i больше не выполняется.
  • print(sum) на самом деле значение суммы 1 на первом шаге

Пример 9:

sum = 0

for i in range(1,101):   # i从1到100
    if i % 2 == 0:    # i除以2的余数为0,即i是偶数
        continue
    sum += i
print(sum)
        
# 结果
2500

Интерпретация результатов выше:

  • Когда i=1 входит в цикл if и условие if не выполняется (i нечетно), выполнитьsum += i, сумма становится 1, i становится 2 и входит в следующий цикл
  • Когда i=2 входит в цикл if, он просто удовлетворяет условию if (i — четное число), выполняет продолжение и не выполняет следующие действия.sum += 1, я становится 3, чтобы войти в следующий цикл
  • Когда i=3 входит в цикл if и условие if не выполняется (i нечетно), выполнитьsum += i, сумма становится 1+3=4, i становится 4 и входит в следующий цикл
  • Когда i=4 входит в цикл if, просто выполните условие if (i — четное число), выполните continue и не выполняйте следующие действия.sum += 1, я становится 5, чтобы войти в следующий цикл

Через первые 4 шага мы обнаружили, что операция сложения выполняется только тогда, когда i является нечетным числом, поэтому на самом деле это сумма нечетных чисел от 1 до 100, что составляет ровно 2500.

Двойной цикл для разрыва

Пример 10:

for i in range(3):  # i:0、1、2
    for j in range(4):  # j:0、1、2、3
        if j > i:
            break
        print((i,j))  # 和if对齐
        
# 结果
(0, 0)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
(2, 2)

Интерпретация результатов выше:

Вышеприведенный код содержит два цикла for, которые входят в первый цикл из i=0:

i j Удовлетворить ли, если выполнить break выполнять ли печать
0 0 нет да, (0, 0)
0 1 да нет
0 2 пропущен
0 3 пропущен
1 0 нет да, (1, 0)
1 1 нет да, (1, 1)
1 2 пропущен
1 3 пропущен
2 0 нет да, (2, 0)
2 1 нет да, (2, 1)
2 2 нет да, (2, 2)
2 3 пропущен

Это исполнение и объяснение всего процесса~

Пример 11:

for i in range(3):    # i=0,1,2
    for j in range(4):   # j=0,1,2,3
        if j > i:
            break
    print((i,j))  # 和第二个for对齐
    
# 结果
(0, 1)
(1, 2)
(2, 3)

Интерпретация результатов выше:

Отличие этого примера от предыдущего в том, что print выравнивается со вторым for, то есть print будет выполняться только тогда, когда второй for полностью запущен.

i j Удовлетворить ли, если выполнить break выполнять ли печать
0 0 нет нет
0 1 да да, (0, 1)
0 2 пропущен
0 3 пропущен
1 0 нет нет
1 1 нет нет
1 2 да да, (1, 2)
1 3 пропущен
2 0 нет нет
2 1 нет нет
2 2 нет нет
2 3 да да, (2, 3)

То есть: когда есть два слоя циклов, разрыв выскочит из самого внутреннего (ближайшего к разрыву) цикла for

Пример 12:

for i in range(3):
    for j in range(4):
        if j > i:
            break
print((i,j))

# 结果
(2, 3)

Приведенная выше интерпретация результата такая же, как и для двух предыдущих процессов, пока последний раз (2, 3) не удовлетворяет условию прерывания, будет выполняться печать.

Двойной цикл -продолжить

Пример 13:

for i in range(3):  # i=0,1,2
    for j in range(4):  # j=0,1,2,3
        if j > i:
            continue
        print((i,j))
        
# 结果
(0, 0)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
(2, 2)

Интерпретация результатов выше:

i j Удовлетворить ли выполнение продолжить выполнять ли печать
0 0 нет да, (0, 0)
0 1 Да, выпрыгнуть
0 2 Да, выпрыгнуть
0 3 Да, выпрыгнуть
1 0 нет да, (1, 0)
1 1 нет да, (1, 1)
1 2 Да, выпрыгнуть
1 3 Да, выпрыгнуть
2 0 нет да, (2, 0)
2 1 нет да, (2, 1)
2 2 нет да, (2, 2)
2 3 Да, выпрыгнуть

Пример 14:

for i in range(3):
    for j in range(4):
        if j > i:
            continue
    print((i,j))
    
# 结果
(0, 3)
(1, 3)
(2, 3)

Интерпретация результатов выше:

Код оператора печати имеет отступ и будет напечатан только тогда, когда будет выполнен второй уровень for.

i j Удовлетворить ли выполнение продолжить выполнять ли печать
0 0 нет нет
0 1 Да, выпрыгнуть нет
0 2 Да, выпрыгнуть нет
0 3 Да, выпрыгнуть да, (0, 3)
1 0 нет нет
1 1 нет нет
1 2 Да, выпрыгнуть нет
1 3 Да, выпрыгнуть да, (1, 3)
2 0 нет нет
2 1 нет нет
2 2 нет нет
2 3 Да, выпрыгнуть да, (2, 3)

Пример 15:

for i in range(3):
    for j in range(4):
        if j > i:
            continue
print((i,j))

# 取最后一次的值
(2, 3)   

Суммируйте существенное различие между ними: break используется для завершениявесь цикл; и продолжить означает выпрыгнутьэтот цикл, не влияет на выполнение следующего цикла.

Сайт артефакта

Наконец, я дам вам классический сайт артефакта:Python tutor.com/visualize Также…

Возьмем этот код в качестве примера:

for i in range(3):
    for j in range(4):
        if j > i:
            continue
    print((i,j))
    
# 结果
(0, 3)
(1, 3)
(2, 3)

1. Напишите код

2. Демонстрационный процесс:

3. Конкретный процесс

Когда мы переходим к шагу 15, появляется первый результат:

После выполнения всех 40 шагов мы можем увидеть желаемый результат:

Заинтересованные друзья могут зайти на этот сайт, чтобы посмотреть ~