Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Всем привет, меня зовут Питер~
Ранее я представил for, if, присваивание и другие связанные операторы в Python Два потока управления в Python, представленные в этой статье: break и continue
Прежде всего, из буквального значения английских слов мы можем просто понять следующие два:
- перерыв, значение прерывания, в коде выражается как прерывание работы следующего кода
- continue, значение continue, отражается в коде как продолжение работы следующего кода
Во-вторых, мы должны понимать, что обавне цикламожет использоваться в циклах for и while, но область действия различна.
В этой статье в основном объясняются два основных момента знаний:
- операторы break и continue
- Влияние отступов на блоки кода
функция диапазона
Функция 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 шагов мы можем увидеть желаемый результат:
Заинтересованные друзья могут зайти на этот сайт, чтобы посмотреть ~