Надеюсь, у вас все хорошо с серией гладких обновлений Python. Позвольте мне быстро напомнить вам, что цель этой серии состоит в том, чтобы научить вас плавным образом основным концепциям, которые вам необходимо понять, чтобы продвинуться вперед в своем обучающем путешествии по Python.
Вы помните тот день, когда нужно было поливать 10 цветов? Или когда вам пришлось залить 20 чашек воды? Вы выполняли одну и ту же задачу на каждом цветке или стакане воды. Такое повторение называется зацикливанием в программировании.
Чтобы дать представление о важности зацикливания, скажем, что вы писали программу, которая должна печатать одно и то же утверждение 100 000 раз. Вы бы посмели повторить это утверждение 100 000 раз вручную ?! Я не буду, и я думаю, что вы тоже не будете. Я уверен, что у вас есть гораздо более важные дела. Вот так и возникает красота петель.
Без дальнейших церемоний, давайте посмотрим, как работает цикл Python.
Пока петля
В этом типе итерации, пока тест оценивается как true
, оператор или блок операторов продолжают выполняться. Таким образом, управление продолжает возвращаться к началу оператора (т. Е. Test) и будет обрабатывать управление следующим оператором (ами), если тест оценивается как false
. Если тест всегда оценивается как true, в этом случае мы имеем бесконечный цикл .
Общий синтаксис оператора while очень прост и выглядит следующим образом:
1
2
|
while test: # loop test
statements # loop body
|
Помните термин бесконечный цикл, который я упоминал некоторое время назад? То есть цикл, который никогда не останавливается, так как тест всегда верен? Давайте посмотрим пример такого цикла:
1
2
|
while 1:
print ‘I\’m an infinite loop.
|
Значение 1
является другой формой логического значения true
. Таким образом, если вы напишите while true
, это будет эквивалентно выражению while в примере. Как вы заметите, вы будете печатать выписки бесконечно.
Чтобы завершить цикл, просто нажмите Control-C на клавиатуре. На рисунке ниже показано, как программа работала бесконечно и была прервана клавиатурой (т.е. Control-C).
Давайте теперь поливаем наши 10 красивых цветов Python. Это можно сделать следующим образом:
1
2
3
4
|
flowers = 1
while flowers <= 10:
print ‘Water the flower # ‘ + str(flowers)
flowers = flowers + 1
|
Результат программы может быть показан на следующем рисунке:
Прежде чем двигаться дальше, позвольте мне прояснить некоторые моменты в приведенном выше скрипте Python. Вам может быть интересно, что такое str()
и почему мы использовали его здесь. На основании документации:
Вернуть строку, содержащую хорошо печатаемое представление объекта. Для строк это возвращает саму строку. Разница с
repr(object)
заключается в том, чтоstr(object)
не всегда пытается вернуть строку, приемлемую дляeval()
; его цель — вернуть строку для печати. Если аргумент не указан, возвращает пустую строку''
.
Другими словами, str()
вернет строковое представление объекта для печати. Но почему? Давайте посмотрим, на что Python будет жаловаться, если мы не будем использовать str()
:
1
2
3
4
|
Traceback (most recent call last):
File «test.py», line 3, in <module>
print ‘Water the flower # ‘ + flowers
TypeError: cannot concatenate ‘str’ and ‘int’ objects
|
Таким образом, проблема в том, что str
не может быть объединен с int
.
Другой момент, который я хочу упомянуть, это использование flowers = flowers + 1
. Если бы мы не использовали такое утверждение, у нас был бы бесконечный цикл, в котором значение цветов оставалось бы равным 1
, и, следовательно, всегда меньше 10
(всегда истинно).
Для петли
Цикл for-loop
— это итерация, которая проходит по элементам упорядоченной последовательности, таким как списки , словарные ключи, кортежи , строки и т. Д.
Синтаксис for-loop
Python выглядит следующим образом:
1
2
|
for var in sequence:
statement(s)
|
Где var
будет содержать элементы последовательности (то есть, список, кортеж), через которые будет проходить for-loop
тело for-loop
будет выполняться для каждого элемента в последовательности.
Время для некоторых примеров for-loop
!
1
2
3
4
5
|
languages = [‘Arabic’, ‘English’, ‘French’, ‘Spanish’]
counter = 0
for lang in languages:
print ‘This language is in the list: ‘ + languages[counter]
counter = counter + 1
|
Что произойдет, если мы инициализируем counter = 1
? В этом случае вы получите ошибку, показанную ниже, поскольку в одной точке цикла индекс будет вне диапазона списка:
1
2
3
4
|
Traceback (most recent call last):
File «test.py», line 4, in <module>
print ‘This language is in the list: ‘ + languages[counter]
IndexError: list index out of range
|
Небольшая викторина. Каким будет вывод следующего цикла? (подсказка: помните, что Python начинает считать с 0
):
1
2
|
for x in range(1,5):
print x
|
Утверждения, используемые в циклах while и for
В подразделах ниже будут показаны некоторые операторы, которые часто используются в циклах.
перемена
Оператор break
приводит к завершению цикла, и выполнение программы продолжается для следующего оператора.
Пример использования break
показан ниже. Он показывает, как программа выходит из цикла ( break
), когда if-statement
принимает значение true
.
1
2
3
4
5
6
7
8
9
|
numbers = [1,2,3,4,5,6,7,8,9,10]
value = 1
while value in numbers:
if value == 5:
break
print ‘I\’m # ‘ + str(value)
value = value + 1
print ‘Sorry, I had to quit the loop when the value became 5’
|
Продолжить
Этот оператор возвращает управление обратно в начало цикла, игнорируя все последующие операторы в цикле. Давайте посмотрим на следующий пример:
01
02
03
04
05
06
07
08
09
10
11
12
|
numbers = [1,2,3,4,5,6,7,8,9,10]
value = 1
while value in numbers:
if value < 5:
print ‘I\’m # ‘ + str(value)
value = value + 1
continue
print ‘I\’m in the if-condition, why are you ignoring me?!’
elif value == 5:
break
print (‘I have reached the last statement in the program and need to exit’)
|
Вы выяснили, как continue
работу? Как вы думаете, что будет на выходе этого скрипта Python? Вперед, попробуй это.
проходят
Это утверждение немного сложнее. Оператор pass
является null
, то есть он ничего не делает. Но зачем мы это используем? Предположим, что вы писали программу, и в какой-то момент вы не были уверены, что должно быть в for-statement
for, например, следующим образом:
1
2
3
4
5
6
|
numbers = [1,2,3,4,5,6,7,8,9,10]
value = 1
for value in numbers:
# not sure what to do here yet
print (‘I have reached the last statement in the program and need to exit’)
|
Если вы попытаетесь запустить программу, вы получите следующую ошибку:
1
2
3
4
|
File «test.py», line 6
print (‘I have reached the last statement in the program and need to exit’)
^
IndentationError: expected an indented block
|
Поэтому Python жалуется, что внутри цикла for-loop
должно быть какое-то утверждение. Если вы введете pass
в for-loop
, вывод программы будет таким:
1
|
I have reached the last statement in the program and need to exit
|
Отсюда можно сделать вывод, что pass
действует как заполнитель, позволяющий запускать программу, даже если вы еще не решили, какие требуемые операторы должны идти в каком-то месте кода.
еще
Оператор else
не требует пояснений и будет просто содержать блок операторов, выполняемых при нормальном завершении цикла, а не в результате break
. Пример его использования следующий:
1
2
3
4
5
6
7
8
9
|
numbers = [1,2,3]
value = 1
while value in numbers:
print ‘I\’m # ‘ + str(value)
value = value + 1
else:
print ‘I\’m part of the else statement block’
print ‘I\’m also part of the else statement block’
|
Вывод
Чтобы завершить эту статью и представить важность зацикливания, я помню, когда мне приходилось выполнять эти операции анализа изображений на каждом пикселе изображения.
Делать это на изображении размером 256x256
означает, что мне пришлось повторить операции 65,536 раз (это количество пикселей)! Цикл на помощь!