Skip to content

Latest commit

 

History

History
183 lines (133 loc) · 6.89 KB

File metadata and controls

183 lines (133 loc) · 6.89 KB

6. Циклы

Операторы цикла

Когда у программиста возникает необходимость повторить какое-то действие несколько раз, он пишет цикл.

В python cуществуют операторы цикла while и for.

В большинстве случаев операторы цикла взаимозаменяемы, но у каждого из них есть некоторые нюансы.

Цикл while

Простейший оператор цикла 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

Во многих языках существует классический вариант цикла 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 и списки

Цикл 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 и словари

Словари прекрасно проходятся в цикле:

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)

Дополнительные фишки: comprehensions

В языках программирования существует такое понятие, как синтаксический сахар. Это возможности языка по некоторому упрощению языковых конструкций, которые не влияют на исполнение конструкций, но упрощают жизнь программиста. Самый популярный и распространенный пример - списковые включения, 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
  • Банкомат выдает сумму максимально возможными купюрами
  • Создать словарь студентов, ключ - ФИО студента, значение - его оценки. Вывести студентов с баллом выше среднего.

Домашка

Домашнее задание