Конструкции управления потоком

Конструкции управления потоком

@Pycoders

Логический (булев) тип данных - bool

Для начала стоит обсудить этот важный аспект, потому что он будет практически ключевым. Логический тип представлен двумя постоянными значениями True и False (Истина и ложь). Значения используются для представления истинности выражения. В числовой эквивалент можно перевести как 1 и 0. Для общего развития стоит отметить, что данный тип является подтипом int.

Значения других типов данных можно конвертировать в логической тип с помощью bool(), которое возвращает True или False в зависимости от первоначального значения.

result = bool(1)        # True
result = bool(0)        # False
result = bool(5.2)      # True

result = bool('hello')   # True
result = bool('')       # False

Обратите внимание на то, что bool() от пустой строки возвращает False.

"#" используется для обозначения комментария. Текст после "#" игнорируется интерпретатором и не влияет на остальную программу.

Логические сравнения

< - Меньше; условие верно, если первый операнд меньше второго.

> - Больше; условие верно, если первый операнд больше второго.

<= - Меньше или равно.

>= - Больше или равно.

== - Равенство. Условие верно, если два операнда равны.

!= - Неравенство. Условие верно, если два операнда неравны.

Распространенная ошибка новичков. Не стоит путь = и ==, т. к. "=" - оператор присваивания, а "==" - оператор сравнения.

result = 1 > 2         # False
result = 6 != 5        # True
result = 3 >= 3        # True

Сравнивать можно даже строки. При сравнении принимается во внимание символы и их регистр. Так, цифровой символ условно меньше, чем любой алфавитный символ. Алфавитный символ в верхнем регистре условно меньше, чем алфавитные символы в нижнем регистре. Если начальные символы представляют алфавитные символы в одном и том же регистре, то смотрят по алфавиту.

result = 'b' > 'a'     # True
result = '1c' > 'a'    # True
result = 'A' > 'a'     # False

Еще один пример, который стоит один раз посмотреть, забыть и никогда не применять.

result = '💀' > '31'   # True

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

  • and - Логический оператор "И". Условие будет истинным если оба операнда истина.

True and True равно True.

True and False равно False.

False and True равно False.

False and False равно False.

  • or - Логический оператор "ИЛИ". Если хотя бы один из операндов истинный, то и все выражение будет истинным.

True or True равно True.

True or False равно True.

False or True равно True.

False or False равно False.

  • not - Логический оператор "НЕ". Изменяет логическое значение операнда на противоположное.

not True равно False.

not False равно True.

Сначала выполняются операторы and, а потом уже or. Ананлог приоритетности опреторов в математике - умножение/деление и сложение/вычитание.

x, y, z = True, False, True
result = x and y or z
print(result)                 # True

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

Может показаться сложным, но в дальнейшем программировании на python всё станет понятно. В данный момент просто примите как должное.

  • is - Возвращает истину, если оба операнда указывают на один объект; x is y вернет истину, если id(x) будет равно id(y).
  • is not - Возврашает ложь если оба операнда указывают на один объект; x is not y, вернет истину если id(x) не равно id(y).

Конструкции управления потоком

Это один из основных элементов в программировании, поэтому лучше усвоить и осознать всё сразу. Условная инструкция if-elif-else (её ещё иногда называют оператором ветвления) - основной инструмент выбора в Python. Проще говоря, она выбирает, какое действие следует выполнить, в зависимости от значения переменных в момент проверки условия. После условия в if/elif и после else ставится двоеточие, а перед строками в самом блоке кода ставятся по 4 пробела.

Реализуем небольшую программу, которая определяет пользователя на совершеннолетие.

age = 17

if age >= 18:
    print('Доступ разрешен.')
elif age == 17:
    print('Подожди еще немного.')
else:
    print('Придется подрости.')

Программа выдаст: Подожди еще немного.

Python смотрит, истинно ли условие после if, оно оказывается ложно, так как 17 не больше и не равно 18; поэтому смотрится смледующее условие, 17 равно 17 - значит, блок кода выполняется. Если бы и это условие оказалось бы ложным, то выполнился бы блок кода в else.

В строках после if/elif/else надо использовать по 4 пробела перед каждой строчкой. Табуляцию тоже можно использовать, но рекомендуются именно пробелы.

Однако как elif, так и else являются не обязательными в программе, можно просто использовать if.

age = 17

if age >= 18:
    print('Доступ разрешен.')

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

Можно подставлять сразу значения в условие, они автоматически преобразуются в тип bool.

num = 20

if num:
    print('В переменной что-то есть')

Вы можете вкладывать неограниченное количество втвлений в сами ветвления.

age = 18

if age >= 18:
    print("Больше 17")
    if age > 21:
        print("Больше 21")
    else:
        print("От 18 до 21")

Обратите внимания, что else относится к if age > 21, а не к if age >= 18.

С помощью and/or/not мы можем смешивать условия.

age = 18

if not age == 18 or age == 20:
    print('Не 18 и не 20 лет')

Тернарный оператор

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

x = 10
y = 20
res = "x больше" if x > y else "y больше"
print(res)

Получаем: y больше.

Теперь разберемся, что здесь происходит: переменная res присваивает значение после занака равно. "x больше" являетс значением, если выполняется условие if x > y, в проивном случае получаем то, что после else. Тернарный операто можно записать по-другому:

переменная = значение if условие else значение

Вот вам небольшая задача на закрепление материала: определить, является ли год високосным. Год является високосным если он кратен 4, но при этом не кратен 100, либо кратен 400. С использованием логических выражений решений реализуется в три строчки.

Свои решение можете присылать мне в личные сообщение, я оценю решение, либо подскажу с чем-либо - @a1f20




Report Page