Когда у программиста возникает необходимость повторить какое-то действие несколько раз, он пишет цикл.
В python cуществуют операторы цикла while и for.
В большинстве случаев операторы цикла взаимозаменяемы, но у каждого из них есть некоторые нюансы.
Простейший оператор цикла while выглядит так:
while условие: действие
или
while условие: блок действий в несколько строк
Суть работы цикла: Проверяется условие в цикле, если оно выполняется (т.е. True), тело цикла выполняется. Затем опять проверяется условие цикла, если true - выполняется тело, и так до тех пор, пока не перестанет выполняться условие цикла.
i = res = 0
while i < 11:
res += i
i += 1
print(res)
В программировании довольно часто используются вечные циклы. Просто есть ситуации, когда нет явного ограничения, и условие трудно проверить заранее. Для того, чтобы выйти из вечного цикла, и вообще из цикла, используется оператор break. Он работает внутри цикла и прекращает его выполнение. Далее проиллюстрирована работа оператора break оператора continue, который прекращает текущую итерацию и начинает следующую:
i = 10
while True:
i -= 1
if not i: continue
if i%2:
print(i)
if i < -10: breakВо многих языках существует классический вариант цикла for. В php это выглядит так:
<?php
$s = 0;
for($i = 0; $i < 10; $i++) {
$s += $i;
}
echo $s . "\n";В python используется несколько другой вариант такого цикла. То же суммирование первых 10 элементов, что и с помощью цикла while, но при помощи for:
sum = 0
for i in range(1, 11):
sum += i
print(sum)Это один из вариантов использования цикла for: для того, чтобы выполнить действия заданное количество раз. Другой вариант - работа цикла for со списками и другими итерируемыми типами данных.
Цикл for специально создан для того, чтобы выполнять повторяющиеся действия со списками и другими итерируемыми объектами. Пара примеров со списками:
>>> S = 'This is Sparta!!'
>>> L = S.split()
>>> L
['This', 'is', 'Sparta!!']
>>> for elem in L:
... print ('say ' + elem)
...
say This
say is
say Sparta!!
>>> for num, elem in enumerate(L):
... print (str(num) + '. say ' + elem)
...
0. say This
1. say is
2. say Sparta!!Абсолютно аналогично цикл for работает с tuple и set.
Обратите внимание на функцию enumerate, которая выдает не только содержимое списка, но и его порядковый номер.
Функция enumerate используется для упрощения прохода по коллекциям в цикле, когда кроме самих элементов требуется их индекс:
a = [10, 20, 30, 40]
for id, item in enumerate(a):
a[id] = item + 5
print(a)
[15, 25, 35, 45]Словари прекрасно проходятся в цикле:
for key in d.keys(): # Цикл for по умолчанию идет по ключам
print(key, d[key])
for key, val in d.items(): # проход по парам
print(key, val)Может пригодиться и функция enumerate:
>>> d = {1: 'a', 2: 'b', 3: 'c'}
>>> for i in d:
... print(i)
...
1
2
3
>>> for i in enumerate(d):
... print(i)
...
(0, 1)
(1, 2)
(2, 3)В языках программирования существует такое понятие, как синтаксический сахар. Это возможности языка по некоторому упрощению языковых конструкций, которые не влияют на исполнение конструкций, но упрощают жизнь программиста. Самый популярный и распространенный пример - списковые включения, list comprehensions. Ниже - примеры приведения обычного цикла к списковому включению:
>>> l = []
>>> for x in range(1, 11):
... l.append(x*x)
...
>>> l
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# то же самое с list comprehension
>>> l2 = [x*x for x in range(1, 11)]
>>> l2
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]Синтаксис у list comprehensions примерно следующий:
result_list = [actions_with_var for var in list if condition]
Как видно из синтаксиса, можно даже добавить проверку некоторого условия, по выполнению которого мы будем добавлять или не добавлять элемент в результирующий список.
# создание словаря при помощи генератора словарей:
>>> d = {a: a ** 2 for a in range(7)}
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}- Написать подсчет суммы списка при помощи for и while
- Банкомат выдает сумму максимально возможными купюрами
- Создать словарь студентов, ключ - ФИО студента, значение - его оценки. Вывести студентов с баллом выше среднего.