Цикл for
Цикл for в языке программирования Python предназначен для перебора элементов структур данных и других составных объектов. Это не цикл со счетчиком, каковым является for во многих других языках.
Что значит перебор элементов? Например, у нас есть список, состоящий из ряда элементов. Сначала берем из него первый элемент, затем второй, потом третий и так далее. С каждым элементом мы выполняем одни и те же действия в теле for . Нам не надо извлекать элементы по их индексам, заботиться, на каком из них список заканчивается, и следующая итерация бессмысленна. Цикл for сам переберет и определит конец.
>>> spisok = [10, 40, 20, 30] >>> for element in spisok: . print(element + 2) . 12 42 22 32
После ключевого слова for используется переменная под именем element . Имя здесь может быть любым. Нередко используют i . На каждой итерации цикла for ей будет присвоен очередной элемент из списка spisok . Так при первой прокрутке цикла идентификатор element связан с числом 10, на второй – с числом 40, и так далее. Когда элементы в spisok заканчиваются, цикл for завершает свою работу.
С английского «for» переводится как «для», «in» как «в». Перевести конструкцию с языка программирования на человеческий можно так: для каждого элемента в списке делать следующее (то, что в теле цикла).
В примере мы увеличивали каждый элемент на 2 и выводили его на экран. При этом сам список конечно же не изменялся:
>>> spisok [10, 40, 20, 30]
Нигде не шла речь о перезаписи его элементов, они просто извлекались и использовались. Однако бывает необходимо изменить сам список, например, изменить значение каждого элемента в нем или только определенных, удовлетворяющих определенному условию. И тут без переменной, обозначающей индекс элемента, случаев не обойтись:
>>> i = 0 >>> for element in spisok: . spisok[i] = element + 2 . i += 1 . >>> spisok [12, 42, 22, 32]
Но если мы вынуждены использовать счетчик, то выгода от использования цикла for не очевидна. Если знать длину списка, то почему бы не воспользоваться while . Длину можно измерить с помощью встроенной в Python функции len() .
>>> i = 0 >>> while i < len(spisok): . spisok[i] = spisok[i] + 2 # или spisok[i] += 2 . i = i + 1 # или i += 1 . >>> spisok [14, 44, 24, 34]
Кроме того, с циклом while мы избавились от переменной element .
Функция range()
Теперь пришло время познакомиться со встроенной в Python функцией range() . «Range» переводится как «диапазон». Она может принимать один, два или три аргумента. Их назначение такое же как у функции randrange() из модуля random . Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг.
Однако, в отличие от randrange() , функция range() генерирует не одно случайное число в указанном диапазоне. Она вообще не генерирует случайные числа. Она генерирует последовательность чисел в указанном диапазоне. Так, range(5, 11) сгенерирует последовательность 5, 6, 7, 8, 9, 10. Однако это будет не структура данных типа «список». Функция range() производит объекты своего класса – диапазоны:
>>> a = range(-10, 10) >>> a range(-10, 10) >>> type(a)
Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам:
>>> a[0] -10 >>> a[5] -5 >>> a[15] 5 >>> a[-1] 9
Хотя изменять их нельзя, так как, в отличие от списков, объекты range() относятся к группе неизменяемых:
>>> a[10] = 100 Traceback (most recent call last): File "", line 1, in TypeError: 'range' object does not support item assignment
Цикл for и range()
Итак, зачем нам понадобилась функций range() в теме про цикл for ? Дело в том, что вместе они образуют неплохой тандем. For как цикл перебора элементов, в отличие от while , позволяет не следить за тем, достигнут ли конец структуры. Не надо вводить счетчик для этого, изменять его и проверять условие в заголовке. С другой стороны, range() дает последовательность целых чисел, которые можно использовать как индексы для элементов того же списка.
>>> range(len(spisok)) range(0, 4)
Здесь с помощью функции len() измеряется длина списка. В данном случае она равна четырем. После этого число 4 передается в функцию range() , и она генерирует последовательность чисел от 0 до 3 включительно. Это как раз индексы элементов нашего списка.
Теперь «соединим» for и range() :
>>> spisok = [14, 44, 24, 34] >>> for i in range(len(spisok)): . spisok[i] += 2 . >>> spisok [16, 46, 26, 36]
Еще раз обратим внимание, в заголовке цикла for берутся элементы вовсе не списка, а объекта range .
Практическая работа
- Заполните список случайными числами. Используйте в коде цикл for, функции range() и randint() .
- Если объект range (диапазон) передать встроенной в Python функции list() , то она преобразует его к списку. Создайте таким образом список с элементами от 0 до 100 и шагом 17.
- В заданном списке, состоящем из положительных и отрицательных чисел, посчитайте количество отрицательных элементов. Выведите результат на экран.
- Напишите программу, которая заполняет список пятью словами, введенными с клавиатуры, измеряет длину каждого слова и добавляет полученное значение в другой список. Например, список слов – [‘yes’, ‘no’, ‘maybe’, ‘ok’, ‘what’], список длин – [3, 2, 5, 2, 4]. Оба списка должны выводиться на экран.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Синтаксис и возможности цикла for Python
Циклы python — for и while представляют собой операторы языка программирования, то есть операторы итерации, которые позволяют повторять код определенное количество раз.
Синтаксис цикла For
Как уже упоминалось ранее, цикл for в Python является итератором, основанным на цикле. Он проходит по элементам list и tuple, строкам, ключам словаря и другим итерируемым объектам.
В Python цикл начинается с ключевого слова for , за которым следует произвольное имя переменной, которое будет хранить значения следующего объекта последовательности. Общий синтаксис for. in в python выглядит следующим образом:
for in : else:
Элементы «последовательности» перебираются один за другим «переменной» цикла; если быть точным, переменная указывает на элементы. Для каждого элемента выполняется «действие».
Пример простого цикла for в Python:
>>> languages = ["C", "C++", "Perl", "Python"] >>> for x in languages: . print(x) . C C++ Perl Python >>>Блок else является особенным; в то время как программист, работающий на Perl знаком с ним, это неизвестная конструкция для программистов, которые работают на C и C++. Семантически он работает точно так же, как и в цикле while .
Он будет выполнен только в том случае, если цикл не был «остановлен» оператором break . Таким образом, он будет выполнен только после того, как все элементы последовательности будут пройдены.
Оператор прерывания в python — break
Если в программе цикл for должен быть прерван оператором break , цикл будет завершен, и поток программы будет продолжен без выполнения действий из else .
Обычно фразы break в pyton связаны с условными операторами.
edibles = ["отбивные", "пельмени", "яйца", "орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") break print("Отлично, вкусные " + food) else: print("Хорошо, что не было пельменей!") print("Ужин окончен.")Если мы запустим этот код, получим следующий результат:
Отлично, вкусные отбивные Я не ем пельмени! Ужин окончен.Удалим «пельмени» из нашего списка еды и получим следующее:
Отлично, вкусные отбивные Отлично, вкусные яйца Отлично, вкусные орехи Хорошо, что не было пельменей! Ужин окончен.Оператор пропуска python — continue
Предположим, нам «пельмени» нам нужно просто пропустить и продолжить прием пищи. Тогда нужно использовать оператор continue , для перехода к следующему элементу.
В следующем маленьком скрипте python мы используем continue , чтобы продолжить, итерацию по списку, когда мы сталкиваемся с пельменями.
edibles = ["отбивные", "пельмени", "яйца", "орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") continue print("Отлично, вкусные " + food) else: print("Ненавижу пельмени!") print("Ужин окончен.")Результат будет следующим:
Отлично, вкусные отбивные Я не ем пельмени! Отлично, вкусные яйца Отлично, вкусные орехи Ненавижу пельмени! Ужин окончен.Итерация по спискам с функцией range()
Если вам нужно получить доступ к индексам списка, не очевидно как использовать цикл for для этой задачи. Мы можем получить доступ ко всем элементам, но индекс элемента остается недоступным. Есть способ получить доступ как к индексу элемента, так и к самому элементу. Для этого используйте функцию range() в сочетании с функцией длины len() :
Что делает цикл for в python
Цикл for , также называемый циклом с параметром, в языке Питон богат возможностями. В цикле for указывается переменная и множество значений, по которому будет пробегать переменная. Множество значений может быть задано списком, кортежем, строкой или диапазоном.
Вот простейший пример использования цикла, где в качестве множества значений используется кортеж:
i = 1 for color in 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet': print('#', i, ' color of rainbow is ', color, sep = '') i += 1В этом примере переменная color последовательно принимает значения 'red' , 'orange' и т.д. В теле цикла выводится сообщение, которое содержит название цвета, то есть значение переменной color , а также номер итерации цикла число, которое сначала равно 1, а потом увеличивается на один (инструкцией i += 1 с каждым проходом цикла.
Инструкция i += 1 эквивалентна конструкции i = i + 1 (это просто сокращенная запись). Такую сокращенную запись можно использовать для всех арифметических операций: *= , -= , /= , %= .
В списке значений могут быть выражения различных типов, например:
for i in 1, 2, 3, 'one', 'two', 'three': print(i)При первых трех итерациях цикла переменная i будет принимать значение типа int , при последующих трех — типа str .
2. Функция range
Как правило, циклы for используются либо для повторения какой-либо последовательности действий заданное число раз, либо для изменения значения переменной в цикле от некоторого начального значения до некоторого конечного.
Для повторения цикла некоторое заданное число раз n можно использовать цикл for вместе с функцией range :
for i in range(4): # равносильно инструкции for i in 0, 1, 2, 3: # здесь можно выполнять циклические действия print(i) print(i ** 2) # цикл закончился, поскольку закончился блок с отступом print('Конец цикла')В качестве n может использоваться числовая константа, переменная или произвольное арифметическое выражение (например, 2 ** 10 ). Если значение n равно нулю или отрицательное, то тело цикла не выполнится ни разу.
Функция range может также принимать не один, а два параметра. Вызов range(a, b) означает, что индексная переменная будеть принимать значения от a до , то есть первый параметр функции range , вызываемой с двумя параметрами, задает начальное значение индексной переменной, а второй параметр — первое значение, которое индексная переменная принимать не будет. Если же a ≥ b , то цикл не будет выполнен ни разу. Например, для того, чтобы просуммировать значения чисел от 1 до n можно воспользоваться следующей программой:
sum = 0 n = 5 for i in range(1, n + 1): sum += i print(sum)В этом примере переменная i принимает значения 1, 2, . n , и значение переменной sum последовательно увеличивается на указанные значения.
Наконец, чтобы организовать цикл, в котором индексная переменная будет уменьшаться, необходимо использовать функцию range с тремя параметрами. Первый параметр задает начальное значение индексной переменной, второй параметр — значение, до которого будет изменяться индексная переменная (не включая его!), а третий параметр — величину изменения индексной переменной. Например, сделать цикл по всем нечетным числам от 1 до 99 можно при помощи функции , а сделать цикл по всем числам от 100 до 1 можно при помощи .
Более формально, цикл при d > 0 задает значения индексной переменной i = a , i = a + d , i = a + 2 * d и так для всех значений, для которых i < b . Если же d < 0 , то переменная цикла принимает все значения i >b .
3. Настройка функции print()
По умолчанию функция print() принимает несколько аргументов, выводит их через пробел, после чего ставит перевод строки. Это поведение можно изменить, используя именованные параметры sep (разделитель) и end (окончание).
print(1, 2, 3) print(4, 5, 6) print(1, 2, 3, sep=', ', end='. ') print(4, 5, 6, sep=', ', end='. ') print() print(1, 2, 3, sep='', end=' -- ') print(4, 5, 6, sep=' * ', end='.')Цикл For в Python 3
В программировании цикл For известен, как цикл с известным количеством повторений. Но в Python этот цикл представляет собой более универсальную инструкцию. Это означает, что цикл For используется в те моменты, когда количество итераций известно до входа в цикл, в отличие от цикла While, который основан на условиях.
Подготовка перед работой
Перед началом работы, необходимо выполнить два шага:
- Установить операционную систему под управлением Ubuntu/Debian/CentOS и произвести первоначальную настройку системы;
- Установить и настроить виртуальную среду на Python.
Цикл For
Конструкция цикла For строится следующим образом:
for 'переменная' in 'последовательность':
'действие'
Рассмотрим пример выполнения цикла внутри командного интерпретатора Python.
Напишем маленький кусок кода, в котором начинается цикл for, за ним присваивается переменная n и в последовательности от 6 до 11 выводятся цифры и с помощью функции print() возвращаем значения в терминал.
for n in range(6,11):
print(n)
В программировании индекс чисел начинается с 0, по этой причине в результате мы видим 5 разных значений, которые находятся в диапазоне от 6 до 11.
Использование range() в цикле for
Одним из встроенных последовательностей является range() для управления тем, сколько раз будет повторяться наш цикл.
У range() есть три параметра:
- Start – является началом последовательности (не обязательный параметр и значение по умолчанию 0)
- Stop – является точкой остановки последовательности (обязательный параметр)
- Step – является шагом последовательности (не обязательный параметр и значение по умолчанию 1).
Рассмотрим код с циклом for, в котором присваиваем переменную n и значение 15 (параметр stop) для range(), чтобы последовательность была в этом диапазоне:
for n in range(15):
print(n)

Для остановки цикла указали параметр 15, поэтому в результате получили 15 значений от 0 до 14 исключая число 15.
Рассмотрим код с использованием параметров range(start/stop), определим цикл for, присвоим переменную n и укажем значения в виде параметров start и stop.
for n in range(10,15):
print(n)

Когда мы определили точку start и stop, мы получили результат в диапазоне от 10 до 15, исключая число 15.
Параметр step используется для указывания шага между значениями start и stop. Рассмотрим в следующем коде использование шагов в диапазоне, объявим цикл for и в нём переменную n, присвоим значения параметрам start/step/stop:
for n in range(25,50,5):
print(n)

В результате получаем 5 разных значений в диапазоне 25-50 с использованием значения 5 в качестве шагов.
В качестве параметра step можно указать отрицательное число, как показано в следующем примере. Объявим цикл for и переменную, в параметры range присвоим значения 1000,900,-10. Чтобы итерация выполнялось в обратном порядке:
for n in range(1000,900,-10):
print(n)

Мы рассмотрели программу, где точкой начала является 1000 и с помощью обратной итерации получили значения до 910.
Использование списка в цикле
В циклах можно использовать список в качестве параметров итерации. Вместо range() можно обозначить переменную до цикла for и использовать после in переменную.
Рассмотрим код с переменным list, который принимает несколько слов, далее объявим цикл for с переменным list и пройдёмся по данным из этого списка:
list = ['one', 'two', 'three', 'four']
for list in list:
print(list)

В этом примере мы рассмотрели вызова данных из списка, обозначенного заранее. Вместо переменно list, мы могли использовать другую переменную, но результат был бы одинаковым.
Поскольку списки и другие типы данных являются итерируемыми, их можно комбинировать с функцией range().
Выберем переменную из примера выше, объявим цикл for с переменной item, в параметрах range() укажем длину списка list. В следующей строке с помощью append в список переменной list добавим слово five:
list = ['one', 'two', 'three', 'four', 'five']
for item in range(len(list):
list.append('six')

В этом примере мы добавили 5 слов six равный количеству слов из списка list.
Также цикл for мы можем использовать для создания списка с разных значений. В следующем примере обозначим переменную numbers, в котором объявим список. Добавим цикл for и параметр 25 в функции range(). В следующей строке запишем функцию для инициализации нашего пустого списка со значением n, который будет дополнять список:
numbers = [ ]
for n in range(25):
numbers.append(n)

В примере мы рассмотрели переменную без списка, дальше добавили цикл, в котором диапазон от 0 до 25 и с помощью append прибавляется +1 значение к 0 и далее.
Этим же способом мы можем перебирать строку с символами.
Объявим переменную word и ей присвоим слово quickly, с помощью цикла for переберём слово:
for letter in word:
print(letter)

В примере выше цикл for перебрал слово quickly и разбил на строки.
В цикле for можно использовать словарь. Как известно в словаре используется ключ, первое слово до двоеточия, за ним следует слово присвоенный к ключу. Чтобы правильно вызвать значение ключа через двоеточия, рассмотрим следующий пример:
for key in list_dict:
print(key + ':' + list_dict[key])

В приведенном выше примере переменная key использовалась для обозначения ключа, а list_dict[key] – для обозначения значений.
Вложенные циклы For
Вложенный цикл является циклом внутри цикла for и конструкция вложенного цикла выглядит следующим образом:
for 'первая переменная для итерации' in 'исходный цикл'
'действие'
for 'вторая переменная для итерации' in 'вложенный цикл'
'действие'
Программа сначала выполняет первую итерацию исходного цикла, затем переходит во внешний цикл и выполняет все итерации, возвращается в исходный цикл и выполняет следующую итерацию и так до конца пока итерация исходного цикла не завершится. Рассмотрим в следующем примере, объявим переменную num с целочисленными типами данных и let с символами.
В исходном цикле объявим цикл for и переменную num, во внешнем let:
num = [10, 15, 25]
let = ['w', 's', 'x']
for number in num:
print(number)
for letter in let:
print(letter)

Усложним задачу со списком внутри списка. Попробуем извлечь информацию отдельными строками:
- Объявим переменную list_in_list и добавим внутрь переменной наш список;
- Добавим исходный цикл с переменной list и list_in_list;
- В цикле объявим item внутрь list;
- Вызовем item.
list_in_list = [['one', 'two', 'three'], [25,50,75], [0.25, 0.50, 0.75]]
for list in list_in_list:
for item in list:
print(item)

Выводы
В этой инструкции мы рассмотрели цикл for с использованием:
- Последовательности range();
- Списков и словарей;
- Вложенные циклы внутри исходного цикла.
