Python 3. Циклы и условия

В этой статье разбираем циклы и условия в 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 — следующая:




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 на английском можно почитать в документации.



2023-04-27T11:07:57
Python