Поток управления
Операторы сравнения¶
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 |
Смешивание операторов¶
Вы можете смешивать логические операторы и операторы сравнения:
Кроме того, вы можете смешивать использование нескольких логических операторов в выражении вместе с операторами сравнения:
Оператор 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?
Тернарный условный оператор¶
Многие языки программирования имеют тернарный оператор, определяющий условное выражение. Чаще всего используется краткий простой оператор условного присваивания. Другими словами, он предлагает однострочный код для оценки первого выражения, если условие истинно, и в противном случае он оценивает второе выражение.
Пример:
>>> 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, или опоставление структурных шаблонов, был впервые представлен в 2020 году PEP 622, а затем официально выпущен с Python 3.10 в сентябре 2022 года.
Сопоставление отдельных значений¶
>>> 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
:
Функция 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
— это величина, на которую переменная увеличивается после каждой итерации.
Вы даже можете использовать отрицательное число в качестве аргумента шага, чтобы обратный отсчет цикла for шел вниз, а не вверх.
Операторы 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.