В этой статье разбираем циклы и условия в Python 3. Именно эти вещи делают ваш код не линейным и более интересным.
Условия
Линейное выполнение кода — это когда интерпретатор выполняет код последовательно, строчка за строчкой. Но программируя, можно задавать некоторые условия, и в зависимости от этих условий интерпретатор начнёт выполнять одни или другие строчки кода.
В примере выше, при не линейном выполнении кода, если условие выполняется, то мы выполняем шаг 3, а если не выполняется, то шаг 2. А затем, в любом случае выполняем шаг 4.
Использование условного оператора if
Для того, чтобы использовать условия в коде Python, существует условный оператор — if.
Ниже показана схема использования условного оператора if (при этом блоки elif и else — не обязательны):
if <условие>: <блок кода 1> elif <условие 2>: <блок кода 2> elif <условие 3>: <блок кода 3> elif <условие N>: <блок кода N> else: <блок кода N+1>
Здесь выполнится только один блок кода, есил выполняется первое условие, то выполняется первый блок кода и остальные блоки не проверяются. Если не одно условие, написанные в if или elif не выполнились, тогда выполняется блок кода написанный в else.
Примеры условий
В качестве условия можно указать:
- > — больше;
- < — меньше;
- >= — больше или равно;
- <= — меньше или равно;
- != — не равно;
- == — равно;
- in — входит;
- not in — не входит;
- is — тождественно (один и тот же объект);
- is not — не тождественно (не один и тот же объект).
Кстати, элементы могут быть равными, но не тождественными (не являются одним и тем же объектом).
Примеры кода
Первый пример кода с условием, проверяющий какое из чисел больше:
a=input('Введите первое число... ') b=input('Введите второе число... ') if a > b: print(a, 'больше чем', b) elif a < b: print(a, 'меньше чем', b) else: print(a, 'и', b, 'равны') ### результат выполнения Введите первое число... 1 Введите второе число... 5 1 меньше чем 5
Программа просит вас ввести первое число и присваивает это число переменной a. Просит вас ввести второе число и присваивает это число переменной b.
Затем начинается блок с условием. После if пишется первое условие, после elif — второе. При этом количество elif может быть любым. И в конце пишется else, без условия и что должно выполнится во всех остальных случаях.
Второй пример кода с условием, который проверяет на вхождение в список:
my_list = [2, 5, 9, 18, 20] a = int(input("Введите число от 1 до 25...")) if a in my_list: print('Введённое число входит в список') else: print('Введённое число не входит в список') ### результат выполнения Введите число от 1 до 25...18 Введённое число входит в список
Программа просит вас ввести число и присваивает это число переменной a. Затем проверяет, есть ли это число в списке и если есть пишет одно, а если нет, то пишет другое.
И ещё один пример. С помощью условия if not my_list, вы можете узнать пустой ли список (либо строка, словарь и другой подобный объект):
my_list1 = [1, 2, 3] my_list2 = [] if not my_list1: print("Список my_list1 - пустой") else: print("Список my_list1 не пустой") if not my_list2: print("Список my_list2 - пустой") else: print("Список my_list2 не пустой") ### результат выполнения Список my_list1 не пустой Список my_list2 - пустой
Цикл while
Использование цикла while
Если условия позволяют выполнять разные блоки кода в зависимости от условия, то циклы в Python позволяют выполнять блоки кода несколько раз. Вначале рассмотрим цикл while — это цикл с условием.
После выполнения первого шага, проверяется условие. Если условие выполняется, то выполняются шаги 2 и 3. Затем опять проверяется условие, если оно опять выполняется, то опять выполняются шаги 2 и 4. И так до тех пор, пока условие не выполнится, тогда выполнится шаг 4. Поэтому при использовании такого цикла важно сделать так, чтобы когда-нибудь условие не выполнилось, а то цикл будет бесконечным.
Схема использования цикла while — следующая:
while <условие>: <блок кода> else: <блок кода>
В примере выше, блок кода в else выполнится 1 раз, когда условие не выполнится, этот блок не обязателен. Об этом подробнее будет написано ниже.
В качестве условий здесь можно использовать всё тоже самое что и в операторе if.
Примеры кода
Первый пример с циклом while:
i = 0 while i < 5: i += 1 print(i) ### результат выполнения 1 2 3 4 5
Разберу работу цикла по итерациям (по шагам). На первой итерации i (которое равно 0) увеличивается на 1 (i += 1) и выводится в консоль. На второй итерации i уже равно 1, оно увеличивается на 1 и выводится в консоль. И так далее пока i станет равняться 6, при этом условие (i < 5) не выполнится и цикл завершится.
Break и continue
Цикл поддерживает две служебные команды, которые часто используются с условным оператором if:
- break — завершить работу цикла и продолжить выполнять остальной код;
- continue — прервать работу на этой итерации и перейти к началу цикла.
Вот пример с break:
i = 1 while i < 20: if i > 4 : break i += i print(i) ### результат выполнения 2 4 8
Здесь цикл работает пока i меньше 20. При этом i вначале равняется 1, а в цикле постоянно растёт. Но как только i станет больше 4, то сработает оператор break. И цикл прервёт свою работу.
А вот пример с continue:
i = 0 while i < 10: i += 1 if i % 2 != 0: continue print(i) ### результат выполнения 2 4 6 8 10
Этот цикл выводит только четные числа от 1 до 10. Работает это таким образом. Вначале i = 0 и в цикле постоянно увеличивается на 1. Если i не делится на 2 без остатка (if i % 2 != 0), то есть остаток от деления на 2 не равен нулю, то пропускает действия снизу и возвращаемся к началу цикла. А если делится на 2 без остатка, то выполняем действия ниже, то есть выводим i в консоль.
Как видите, Python позволяет в циклы помещать условия. И это используется не только для continue и break, а в любых случаях, когда вам это нужно.
Блок else
В цикле while помимо основного блока, есть дополнительный — else. Он выполняется, только если цикл не был прерван оператором break.
В этом примере цикл не будет прерван оператором break и блок кода в else выполнится:
i = 0 while i < 5: i += 1 if i == 10: break print(i) else: print("Конец цикла!") ### результат выполнения 1 2 3 4 5 Конец цикла!
А в этом примере цикл прервется в тот момент, когда i станет равна 3 с помощью break. Поэтому блок else не выполнится:
i = 0 while i < 5: i += 1 if i == 3: break print(i) else: print("Конец цикла!") ### результат выполнения 1 2
Цикл for
Использование цикла for
Этот цикл очень хорошо помогает пробегаться по всевозможным последовательностям, строкам, словарям, кортежам.
Схема работы цикла for следующая:
Здесь мы пробегаемся по списку объектов и можем с ними что-нибудь делать.
Схема использования цикла for — следующая:
for i in <список / строка / кортеж / словарь / последовательность>: <блок кода> else: <блок кода 2>
Также как и с циклом while, блок else считается не обязательным и выполняется, только если цикл не будет прерван с помощью break.
Примеры кода
В первом примере цикл будет по очереди выводить элементы списка my_list.
my_list = [1, 12, 18] for i in my_list: print(i) ### результат выполнения 1 12 18
Во втором примере в цикле будем создавать новый список, в котором все элементы будут больше в два раза чем в исходном списке:
my_list = [2, 3, 4, 5] my_list2 = [] for i in my_list: my_list2.append(i*2) print(my_list2) ### результат выполнения [4, 6, 8, 10]
Break и continue
Этот цикл, как и цикл while, поддерживает две служебные команды — break и continue.
Вот пример с break:
my_list = [1, 12, 45, 58, 96] for i in my_list: i += i if i >= 100: break print(i) ### результат выполнения 2 24 90
Здесь я складываю числа из списка: вначале i = 1, получается 1 + 1 = 2, пишет 2. Затем i = 12, 12 + 12 = 24, пишет 24. И так далее. Затем i = 45, 45 + 45 = 90, пишем 90. Затем i = 58, 58 + 58 = 116, 116 это больше 100, выполняем break и больше ничего не пишем.
А вот пример с continue:
my_list = [1, 12, 45, 58, 96] for i in my_list: if i % 2 != 0: continue print(i) ### результат выполнения 12 58 96
Здесь я вывожу только чётные числа. Если i не делится на 2 без остатка (i % 2 != 0), то возвращаемся к началу цикла и обрабатываем следующий элемент.
Команда pass
Кстати, есть ещё она команда, которую можно использовать в цикле и не только в нём, это команда — pass. Она ничего не делает, но если в этом месте кода нужно что-то написать, но вы пока не знаете что, то можете написать pass.
Этот кусок кода вызовет ошибку:
my_list = [1, 12, 18, 45, 58, 96] for i in my_list:
А этот не вызовет:
my_list = [1, 12, 18, 45, 58, 96] for i in my_list: pass
Блок else
Так же как и в цикле while, в цикле for есть дополнительный блок — else. Он выполняется, только если цикл не был прерван оператором break.
Например здесь цикл дойдёт до конца и не выполнит оператор break:
my_list = [1, 12, 18] for i in my_list: if i == 17: break print(i) else: print("Конец цикла") ### результат выполнения 1 12 18 Конец цикла
А в этом примере оператор break выполнится:
my_list = [1, 12, 18, 45, 58, 96] for i in my_list: if i == 45: break print(i) else: print("Конец цикла") ### результат выполнения 1 12 18
Пробегаемся по другим последовательностям (дополнительные примеры)
Список кортежей:
my_list = [(3, 6), (0, 1), (4, 5)] for (a,b) in my_list: print(a, b) ### результат выполнения 3 6 0 1 4 5
Ключи словаря:
my_dict = {'а':1, 'Ь': 10, 'с': 38} for i in my_dict: print(i) ### результат выполнения а Ь с
Ключи и значения словаря:
my_dict = {'а':1, 'Ь': 10, 'с': 38} for i, in my_dict: print(i, '=>', my_dict[i]) ### результат выполнения а => 1 Ь => 10 с => 38
И ещё 1 момент! С помощью функции range() можно сделать последовательность для цикла for, например:
for i in range(0, 5): print(i) ### результат выполнения 0 1 2 3 4
Здесь мы создали последовательность от 0 до 5 (не включительно). И пробежались по этой последовательности.
Функция range() позволяет указать шаг итерации, например укажем шаг = 2:
for i in range(0, 10, 2): print(i) ### результат выполнения 0 2 4 6 8
Итог
Здесь мы рассмотрели циклы и условия работающие в Python, а именно условный оператор if и два цикла: while и for.
Узнали что конструкция if может дополнительно содержать несколько блоков с elif (с дополнительными условиями) и один блок else (который выполняется в случае если if и ни один elif не выполнился).
Цикл while — это цикл с условием, цикл for — это цикл пробегающий по последовательностям. Кстати последовательность можно сделать с помощью функции range, которую я тоже рассмотрел.
Узнали что циклы while и for также содержат дополнительный блок else, который выполнится при выходе из цикла. А также оба цикла управляются дополнительными инструментами continue и break. При этом, если цикл завершается с помощью break, то блок else не выполняется.
Каждый цикл может содержать в себе вложенный цикл, но не стоит допускать слишком большую вложенность. Также цикл может быть внутри блока if, или наоборот, блок if может быть внутри цикла. То-есть все эти элементы (if, while, for) допускают вложенность.
Другие статьи по Python доступны здесь.
Про if, for, range, break и continue на английском можно почитать в документации.