Перейти к содержанию

Поток управления

Операторы сравнения

Operator Meaning
== Равно
!= Не равно
< Меньше, чем
> Больше чем
<= Меньше или равно
>= Больше или равно

Эти операторы оцениваются как True или False в зависимости от значений, которые вы им даете.

Примеры:

>>> 42 == 42
True

>>> 40 == 42
False

>>> 'hello' == 'hello'
True

>>> 'hello' == 'Hello'
False

>>> 'dog' != 'cat'
True

>>> 42 == 42.0
True

>>> 42 == '42'
False

Логические операторы

Eсть три булевых оператора: and, or, и not.

Таблица истинности оператора and:

Expression Evaluates to
True and True True
True and False False
False and True False
False and False False

Таблица истинности оператора or:

Expression Evaluates to
True or True True
True or False True
False or True True
False or False False

Таблица истинности оператора not:

Expression Evaluates to
not True False
not False True

Смешивание операторов

Вы можете смешивать логические операторы и операторы сравнения:

>>> (4 < 5) and (5 < 6)
True

>>> (4 < 5) and (9 < 6)
False

>>> (1 == 2) or (2 == 2)
True

Кроме того, вы можете смешивать использование нескольких логических операторов в выражении вместе с операторами сравнения:

>>> 2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True

Оператор if

Оператор if оценивает выражение, и если это выражение истинно, он выполняет следующий код с отступом:

>>> name = 'Debora'

>>> if name == 'Debora':
...    print('Hi, Debora')
...
# Hi, Debora

>>> if name != 'George':
...    print('You are not George')
...
# You are not George

Оператор else выполняется только в том случае, если оценка if и всех выражений elif равна False:

>>> name = 'Debora'

>>> if name == 'George':
...    print('Hi, George.')
... else:
...    print('You are not George')
...
# You are not George

Только после того, как выражение оператора if становится False, оператор elif оценивается и выполняется:

>>> name = 'George'

>>> if name == 'Debora':
...    print('Hi Debora!')
... elif name == 'George':
...    print('Hi George!')
...
# Hi George!

части elif и else являются необязательными.

>>> name = 'Antony'

>>> if name == 'Debora':
...    print('Hi Debora!')
... elif name == 'George':
...    print('Hi George!')
... else:
...    print('Who are you?')
...
# Who are you?

Тернарный условный оператор

Многие языки программирования имеют тернарный оператор, определяющий условное выражение. Чаще всего используется краткий простой оператор условного присваивания. Другими словами, он предлагает однострочный код для оценки первого выражения, если условие истинно, и в противном случае он оценивает второе выражение.

<expression1> if <condition> else <expression2>

Пример:

>>> age = 15

>>> # this if statement:
>>> if age < 18:
...    print('kid')
... else:
...    print('adult')
...
# output: kid

>>> # is equivalent to this ternary operator:
>>> print('kid' if age < 18 else 'adult')
# output: kid

Тернарные операторы могут быть объединены в цепочку:

>>> age = 15

>>> # this ternary operator:
>>> print('kid' if age < 13 else 'teen' if age < 18 else 'adult')

>>> # is equivalent to this if statement:
>>> if age < 18:
...     if age < 13:
...         print('kid')
...     else:
...         print('teen')
... else:
...     print('adult')
...
# output: teen

Оператор Switch-Case

Оператор Switch-Case В языках программирования оператор switch — это тип механизма управления выбором, который позволяет значению переменной или выражения изменять поток управления выполнением программы посредством поиска и сопоставления.

Операторы Switch-Case, или опоставление структурных шаблонов, был впервые представлен в 2020 году PEP 622, а затем официально выпущен с Python 3.10 в сентябре 2022 года.

Официальная документация PEP 636 предоставляет официальное руководство по сопоставлению шаблонов Python или операторам Switch-Case.

Сопоставление отдельных значений

>>> response_code = 201
>>> match response_code:
...     case 200:
...         print("OK")
...     case 201:
...         print("Created")
...     case 300:
...         print("Multiple Choices")
...     case 307:
...         print("Temporary Redirect")
...     case 404:
...         print("404 Not Found")
...     case 500:
...         print("Internal Server Error")
...     case 502:
...         print("502 Bad Gateway")
...
# Created

Соответствие шаблону или

В этом примере символ вертикальной черты (| или or) позволяет python возвращать один и тот же ответ для двух или более случаев.

>>> response_code = 502
>>> match response_code:
...     case 200 | 201:
...         print("OK")
...     case 300 | 307:
...         print("Redirect")
...     case 400 | 401:
...         print("Bad Request")
...     case 500 | 502:
...         print("Internal Server Error")
...
# Internal Server Error

Сопоставление по длине Iterable

>>> today_responses = [200, 300, 404, 500]
>>> match today_responses:
...     case [a]:
...             print(f"One response today: {a}")
...     case [a, b]:
...             print(f"Two responses today: {a} and {b}")
...     case [a, b, *rest]:
...             print(f"All responses: {a}, {b}, {rest}")
...
# All responses: 200, 300, [404, 500]

Значение по умолчанию

Символ подчеркивания (_) используется для определения регистра по умолчанию:

>>> response_code = 800
>>> match response_code:
...     case 200 | 201:
...         print("OK")
...     case 300 | 307:
...         print("Redirect")
...     case 400 | 401:
...         print("Bad Request")
...     case 500 | 502:
...         print("Internal Server Error")
...     case _:
...         print("Invalid Code")
...
# Invalid Code

Сопоставление встроенных классов

>>> response_code = "300"
>>> match response_code:
...     case int():
...             print('Code is a number')
...     case str():
...             print('Code is a string')
...     case _:
...             print('Code is neither a string nor a number')
...
# Code is a string

Защита операторов Match-Case

>>> response_code = 300
>>> match response_code:
...     case int():
...             if response_code > 99 and response_code < 500:
...                 print('Code is a valid number')
...     case _:
...             print('Code is an invalid number')
...
# Code is a valid number

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

Оператор while используется для повторного выполнения до тех пор, пока выражение True:

>>> spam = 0
>>> while spam < 5:
...     print('Hello, world.')
...     spam = spam + 1
...
# Hello, world.
# Hello, world.
# Hello, world.
# Hello, world.
# Hello, world.

Оператор break

Если выполнение достигает оператора break, оно немедленно выходит из предложения цикла while:

>>> while True:
...     name = input('Please type your name: ')
...     if name == 'your name':
...         break
...
>>> print('Thank you!')
# Please type your name: your name
# Thank you!

Оператор continue

Когда выполнение программы достигает оператора continue, выполнение программы немедленно возвращается к началу цикла.

>>> while True:
...     name = input('Who are you? ')
...     if name != 'Joe':
...         continue
...     password = input('Password? (It is a fish.): ')
...     if password == 'swordfish':
...         break
...
>>> print('Access granted.')
# Who are you? Charles
# Who are you? Debora
# Who are you? Joe
# Password? (It is a fish.): swordfish
# Access granted.

Цикл For

Цикл for выполняет итерацию по list, tuple, dictionary, set и string:

>>> pets = ['Bella', 'Milo', 'Loki']
>>> for pet in pets:
...     print(pet)
...
# Bella
# Milo
# Loki

Функция range()

Функция range() возвращает последовательность чисел. Он начинается с 0, увеличивается на 1 и останавливается до указанного числа:

>>> for i in range(5):
...     print(f'Will stop at 5! or 4? ({i})')
...
# Will stop at 5! or 4? (0)
# Will stop at 5! or 4? (1)
# Will stop at 5! or 4? (2)
# Will stop at 5! or 4? (3)
# Will stop at 5! or 4? (4)

Функция range() также может изменять свои 3 аргумента по умолчанию. Первые два будут начальным start и конечным stop значениями, а третий будет аргументом шага. Шаг step — это величина, на которую переменная увеличивается после каждой итерации.

# range(start, stop, step)
>>> for i in range(0, 10, 2):
...    print(i)
...
# 0
# 2
# 4
# 6
# 8

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

>>> for i in range(5, -1, -1):
...     print(i)
...
# 5
# 4
# 3
# 2
# 1
# 0

Операторы For else

Это позволяет указать оператор для выполнения в случае выполнения полного цикла. Полезно только тогда, когда в цикле может возникнуть условие прерывания break:

>>> for i in [1, 2, 3, 4, 5]:
...    if i == 3:
...        break
... else:
...    print("only executed when no item is equal to 3")

Завершение программы с sys.exit()

Функция exit() позволяет выйти из Python.

>>> import sys

>>> while True:
...     feedback = input('Type exit to exit: ')
...     if feedback == 'exit':
...         print(f'You typed {feedback}.')
...         sys.exit()
...
# Type exit to exit: open
# Type exit to exit: close
# Type exit to exit: exit
# You typed exit