Цикл for в Python: просто и понятно!
Привет! В этой статье мы поговорим о цикле for
в Python. Он позволяет работать с коллекциями любого типа (списки, строки, множества, словари):
for name in ["Вася", "Маша", "Петя"]:
print(name)
Вывод:
Вася
Маша
Петя
Цикл for с range
Чтобы выполнить блок кода определенное количество раз, мы можем воспользоваться функцией range
.
По умолчанию функция range
возвращает последовательность чисел, начиная с нуля:
for i in range(3):
print(i)
Вывод программы:
0
1
2
При этом мы можем указать, с какого числа начать:
for i in range(2, 5):
print(i)
Вывод:
2
3
4
Также мы можем поменять шаг цикла, передав третий аргумент в функцию range
:
for i in range(2, 9, 3):
print(i)
Вывод:
2
5
8
Какой будет вывод следующего кода на Python?
for i in range(3, 15, 4):
print(i)
Цикл for по строке
В Python мы можем использовать цикл for
для итерации по строке. Наш блок кода будет выполнен для каждого символа:
name = "Вася"
for letter in name:
print(letter)
Вывод:
В
а
с
я
Инструкция break
Python позволяет нам в любой момент завершить выполнение цикла преждевременно. Для этого нужно просто воспользоваться ключевым словом break
:
for i in range(10):
if i == 3:
print("Дальше не пойду")
break
print(i)
Вывод:
0
1
2
Дальше не пойду
Инструкция continue
Если мы не хотим полностью останавливать работу цикла, а только пропустить одну итерацию, мы можем воспользоваться ключевым словом continue
:
for i in range(5):
if i == 3:
print("3 не подойдет")
continue
print(i)
Вывод:
0
1
2
3 не подойдет
4
Из примера видно, что цикл for
продолжил свое выполнение, пропустив только один элемент. В этом примере можно было бы обойтись только if-else
:
for i in range(5):
if i == 3:
print("3 не подойдет")
else:
print(i)
Но я предпочитаю вариант с continue
, когда у нас есть много инструкций, которые должны быть выполнены в цикле. continue
позволяет убрать уровень вложенности, который возникает из-за использования else
.
Какой будет вывод следующего Python кода?
for i in range(5):
if i == 2:
continue
elif i == 4:
print("Завершение")
break
print(i)
for-else
Ключевое слово else
можно использовать не только с if
, но и с for
:
for i in range(3):
print(i)
else:
print("Закончили!")
0
1
2
Закончили!
Но давайте теперь попробуем добавить уже знакомый нам break
:
for i in range(3):
if i == 2:
break
print(i)
else:
print("Закончили!")
Тут вывод уже поменялся:
0
1
Никакого “Закончили!” мы не видим. Дело в том, что else
после for
срабатывает только в том случае, если цикл обработал все элементы без вызова break
. continue
на else
никак не влияет:
for i in range(3):
if i == 2:
continue
print(i)
else:
print("Закончили!")
Вывод:
0
1
Закончили!
Что будет выведено на экран?
for i in range(5):
if i % 3 == 0:
continue
elif i == 4:
break
print(i)
else:
print("Закончили!")
Вложенные циклы
Мы можем использовать цикл for
внутри другого цикла for
:
for i in range(1, 3):
for j in range(1, 3):
print(i, "*", j, "=", i * j)
Вывод:
1 * 1 = 1
1 * 2 = 2
2 * 1 = 2
2 * 2 = 4
При этом мы можем использовать циклы любой вложенности.
Инструкция pass
Если мы не хотим выполнять код в теле цикла, то можно просто указать ключевое слово pass
:
for i in range(100):
pass
Код выше ничего не сделает.
Функция enumerate с циклом for
Часто нужно знать порядковый номер элемента внутри цикла for
. Для этого можно обернуть список в функцию enumerate
:
names = ["Вася", "Маша", "Петя"]
for i, name in enumerate(names):
print(i, name)
Вывод:
0 Вася
1 Маша
2 Петя
Мы можем выбрать, с какого числа
enumerate
начнет подсчет при помощи аргументаstart
.
Какой будет вывод следующего кода на Python?
students = ["Иван", "Ольга", "Егор"]
for idx, student in enumerate(students, start=1):
print(idx, student)
Цикл for по словарю (dict)
Нужно пробежать по значениям в словаре? Не беда. Цикл for
с этим легко справиться:
ages = {
"Вася": 18,
"Маша": 22,
"Петя": 26,
}
for name in ages:
print(name, ages[name])
Вывод:
Вася 18
Маша 22
Петя 26
При этом мы можем получить сразу и имя и возраст:
for name, age in ages.items():
print(name, age)
Вывод:
Вася 18
Маша 22
Петя 26
Если же нам нужен только возраст, то можно воспользоваться методом .values()
:
for age in ages.values():
print(age)
Вывод:
18
22
26