Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Python. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Циклы (повторения) – это составные операторы, которые позволяют мно-
гократно выполнять код до тех пор, пока условие верно. Рассмотрим два вида циклов, существующих в Python, – for и while.

Цикл for

Цикл for, также называемый циклом с параметром, выполняет набор ин­струкций определенное количество раз. Вы даете циклу for число для начала (например, число a), число для остановки (например, число z), набор инструкций и переменную, которая отслеживает количество раз, когда инструкции были вы­полнены (она называется параметром/переменной цикла и обозначают ее i). Мо­жете думать о цикле for как о круге. Он ходит по кругу, выполняя инструкции. Иначе говоря, цикл for является итератором, основанным на цикле. Каждый раз, когда цикл выполняет свои инструкции, i (который начинается со значения a) увеличивается на 1. Когда i становится равным z, цикл for останавливается.
Синтаксис цикла for выглядит следующим образом:
for [имя_переменной] in [последовательность]:
[код_для_выполнения]
else:
[код_для_выполнения]
В цикле for указываются переменная и последовательность (множество значений), по которой будет пробегать переменная. Последовательность может быть задана списком, кортежем, строкой, диапазоном, ключами словаря и дру­гими итерируемыми объектами. Для каждого элемента реализуется блок ин­струкций «код_для_выполнения». Блок else является необязательным, но де­лает программный код более универсальным (о нем будет сказано позже).
Переменная x последовательно выводит все элементы списка languages:
languages = ["C", "C++", "Perl", "Python"] for x in languages:
print(x) >> C >> C++ >> Perl >> Python
51
Последовательно выводятся элементы итерируемого объекта my_string:
my_string = "Python" for character in my_string:
print(character) >> 'P' >> 'y' >> 't' >> 'h' >> 'o' >> 'n'
Здесь итерируются элементы кортежа:
my_tuple = ("a", "b", "c")
for item in my_tuple:
print(character) >> 'a' >> 'b' >> 'c'
Здесь итерируются элементы словаря:
my_dict = {"self": "taught", "programming", "wizard":}
for key in my_dict:
print(key) >> "self" >> "wizard"
В последнем примере использовали ключ, потому что, когда выполняется
итерация по такому словарю, можно получить доступ только к каждому ключу в нем, а не к значению, поэтому выбрали имя переменной, чтобы было понятно.
Возможность перебирать повторяющиеся объекты очень полезна. Итера-
тивные объекты используются для хранения данных, и можно использовать циклы for для перебора данных, чтобы легко вносить в них изменения или пе­ремещать данные из одного итеративного объекта в другой.
52
Функция range(). Чтобы повторить цикл фиксированное число раз,
можно использовать цикл for вместе с функцией range, при этом индексная переменная принимает значения от 0 до 3 включительно:
for i in range(4): print(i) print(i ** 2) # цикл закончился, поскольку закончился блок с отступом print('Конец цикла')
>> 0 >> 0 >> 1 >> 1 >> 2 >> 4 >> 3 >> 9 >> Конец цикла
В данном примере range()используется для доступа как к индексу эле-
мента, так и к нему самому. При этом можно использовать ее в сочетании с функцией длины len():
fibonacci = [0,1,1,2,3,5,8,13,21] for i in range(len(fibonacci)): print(i,fibonacci[i])
>> 0 0 >> 1 1 >> 2 1 >> 3 2 >> 4 3 >> 5 5 >> 6 8 >> 7 13 >> 8 21
53
Функция range() может иметь два параметра: range(a, b), где пара-
метр принимает значения от a до b-1.
Следующая программа суммирует числа от 1 до n:
sum = 0
n = 5
for i in range(1, n + 1):
sum += i
print(sum)
>> 15
Функция range() может иметь не только один или два параметра, но
и три: range(a, b, c), где третий параметр c – величина изменения ин­дексной переменной. Например, функция range(1, 100, 2) организует цикл по нечетным числам от 1 до 99, а range(100, 0, -1) организует цикл от 100 до 1.

Цикл while

В то время как цикл for выполняет код определенное количество раз, цикл while (“пока”) выполняет код до тех пор, пока условие цикла в его заго­ловке истинно (True).
Синтаксис цикла while:
while [условие]: [код_для_выполнения] else: [код_для_выполнения]
Выполнение цикла while начинается с проверки условия. В случае если условие не выполняется, то есть оно ложно (False), выполнение цикла прекра­щается и управление передается за пределы тела цикла. В противном случае выполняется тело цикла и вновь проверяется условие. Работа цикла прекраща­ется, когда условие перестает выполняться. Записывая условие, нужно следить за тем, чтобы оно не принимало постоянно значение True, так как в этом случае
54
цикл не сможет завершиться. Такой цикл называется бесконечным циклом
Входные данные:
Выходные данные:
3456
4
(для прерывания бесконечного цикла необходимо нажать комбинацию клавиш Ctrl+C). В цикле while, так же как и в цикле for, блок else является необя- зательным, но делает программный код более универсальным (о нем будет ска­зано позже).
Следующая программа выводит i до тех пор, пока i будет меньше 5:
i = 1 while i < 5: print(i) i += 1
>> 1 >> 2 >> 3 >> 4
Нижеприведенная программа подсчитывает количество цифр натурального
числа n:
n = int(input()) length = 0 while n > 0: n //= 10 # или n = n // 10 length += 1 print(length)
Возможно и другое решение этой задачи с помощью комбинации функций
len и str:
length = len(str(i)).
Напомним, что встроенная функция str преобразует объект в строковый
тип.
55
Еще один пример использования цикла while:
for i in 'hello world':
i = 1
>> 3
x = 5 while x > 0: print('{}'.format(x)) x -= 1 print("Happy New Year!")
>> 5 >> 4 >> 3 >> 2 >> 1 >> 'Happy New Year!'

Операторы break и continue

Оператор break позволяет прервать исполнение циклов for и while и выйти из них преждевременно. Логично инструкцию break вызывать только внутри оператора if, так как в противном случае теряется смысл использова­ния циклов.
Ниже приведены примеры использования инструкции break в циклах
for и while.
if i == 'o': break print(i * 2, end='') ...
>> hheellll
while i < 6: print(i) if i == 3: break
i += 1 >> 1 >> 2
Оператор continue позволяет прервать текущую итерацию и перейти
к выполнению следующей, минуя оставшееся тело цикла.
56
Ниже приведены примеры использования инструкции continue в циклах
for i in 'hello world':
i = 0
Входные данные:
Выходные данные:
3
4
Ни одного от-
for и while.
if i == 'o': continue print(i * 2, end='') ...
>> hheellll wwrrlldd
while i < 6: i += 1 if i == 3: continue
print(i) >> 1 >> 2 >> 4 >> 5 >> 6
В циклах можно использовать необязательную инструкцию else с последу-
ющим блоком операций, который будет выполнен один раз после окончания цик­ла, когда условие примет значение False. Заметим, что если выполнение цикла было прервано инструкцией break, то ветвь else будет проигнорирована.
Ниже приведены примеры использования инструкции else в циклах for
и while.
n = int(input()) for i in range(n): a = int(input()) if a < 0: print('Встретилось отрицательное число', a) break else: print('Ни одного отрицательного числа нет')
6 2
рицательного числа нет
57
a = int(input())
Входные данные:
Выходные данные:
3
0
Встретилось
while a != 0: if a < 0: print('Встретилось отрицательное число', a) break a = int(input()) else: print('Ни одного отрицательного числа нет')
6
-1
отрицательное число -1
4

Функция Enumerate

Рассмотрим встроенную функцию Enumerate, которая перебирает кол-
лекцию элементов, отслеживая индекс текущего элемента.
Функция enumerate имеет два аргумента:
enumerate(sequence, start),
где sequence – итератор, а start – необязательный аргумент, начальное зна­чение которого по умолчанию равно нулю, но можно установить его в любое целое число, например, равное единице.
Возвращаемое значение функции – кортеж из двух элементов: индекс
и элемент объекта.
Функцию enumerate применяют тогда, когда необходим счётчик коли-
чества элементов. При этом не нужно инициировать переменную-счётчик.
«Питонисты», пришедшие из C или Java, часто используют конструкцию
range(len (...)) антипаттерн, чтобы отслеживать индекс во время итера- ции в цикле for:
# Антипаттерн! Не делайте так. for i in range(len(spisok)): print(i, my_items[i])
58
Функция enumerate делает эту конструкцию более «питонической»
и идиоматической, а код, более читабельным и более устойчивым к ошибкам.
# Паттерн! Делайте так. for i in enumerate(spisok): print(i)
Например:
list = [14, 42, 27, 35] for i in enumerate(list): ... print(i)
... >> (0, 14) >> (1, 42) >> (2, 27) >> (3, 35)
При необходимости эти кортежи можно распаковать, то есть извлечь ин-
декс и значение, в теле цикла следующим образом:
for i in enumerate(list):
print(i[0], i[1])
>> 0, 14 >> 1, 42 >> 2, 27 >> 3, 35
Но чаще это делают еще в заголовке for, используя следующую кон-
струкцию:
for id, val in enumerate(list):
print(id, val)
... >> 0, 14 >> 1, 42 >> 2, 27 >> 3, 35
59
В последнем случае было использовано так называемое множественное
x = 1
>> 2 1
x = 1
присваивание, которое позволяет в одной инструкции присваивания изменять значение сразу нескольких переменных. Например:
x, y = 0, 1
Эта возможность весьма удобна, если нужно обменять значения двух пе-
ременных. Сравните, как это реализуется в большинстве языков программиро­вания (левый столбец таблицы) и в Python (правый столбец таблицы):
y = 2 t = a x = y y = t
y = 2 x, y = y, x print(x, y)
>> 2 1
print(x, y)

Вложенные циклы

Вложенным циклом называется конструкция, в которой цикл выполняет-
ся внутри другого цикла, причем количество вложенных циклов не ограничено. Цикл, находящийся внутри, называется внутренним, а снаружи – внешним.
Телом цикла называется блок кода, который нужно выполнить несколько
раз, при этом один проход цикла называется итерацией.
Вложенные циклы выполняются следующим образом: при каждой итера-
ции внешнего цикла полностью выполняются все итерации внутреннего цикла, после чего начинается следующая итерация внешнего цикла.
Демонстрационный пример:
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]