Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Логика Python: Основы программирования

Кроме арифметических операций, со школы нам известны операции сравнения. Например, 5 > 4. Это звучит как вопрос: «5 больше 4?». В данном случае ответ «да». В других случаях ответом может быть «нет» (например, для 3 < 1). Операции сравнения не имеют привязки к числам. Сравнивать можно практически всё что угодно, например, строки. Каждый раз, когда мы входим на какой-то сайт, внутри происходит сравнение введенных логина и пароля с теми, какие есть в базе. И только если они есть, нас пускают во внутрь (аутентифицируют).

Языки программирования адаптировали все математические операции сравнения практически в неизменном виде. Единственное серьезное отличие – операторы равенства и неравенства. В математике для этого используется обычное равно =, но в программировании такое встречается не часто. Во многих языках символ = используется для присваивания значений переменным, поэтому для сравнения в Python взяли ==.

Список операций сравнения:

  • < — меньше
  • <= — меньше или равно
  • > — больше
  • >= — больше или равно
  • == — равно
  • != — не равно

Эти операции применимы не только к числам. Например, с помощью оператора равенства можно сравнить строки: password == text — это сравнение идентичности строк, записанных в разных переменных.

Логический тип

Логическая операция типа 5 > 4 или password == text — это выражение, и его результат — специальное значение True («истина») или False («ложь»). Это новый для нас тип данных — bool.

result = 5 > 4
print(result)  # => True
print('one' != 'one')  # => False

Наряду со строками (str) и целыми и рациональными числами, тип bool (булев) — это один из примитивных типов данных в Python.

Попробуем написать простую функцию, которая принимает на вход возраст ребёнка и определяет, младенец ли он. Младенцами считаются дети до года:

def is_infant(age):
    return age < 1

print(is_infant(3))  # => False

Пользуемся тем фактом, что любая операция — это выражение, поэтому единственной строчкой функции пишем «вернуть то значение, которое получится в результате сравнения age < 1». В зависимости от пришедшего аргумента, сравнение будет либо истинным (True), либо ложным (False), а return вернёт этот результат.

А теперь проверим ребенка, которому полгода:

print(is_infant(0.5))  # => True

Предикаты

Функция is_infant() — это функция-предикат (или функция-вопрос). Предикат отвечает на утвердительный вопрос «да» или «нет», возвращая значение типа bool. Предикаты во всех языках принято именовать особым образом для простоты анализа. В Python предикаты, как правило, начинаются с префикса is или has:

  • is_infant() — «младенец ли?»
  • has_children() — «есть ли дети?»
  • is_empty() — «пустой ли?»
  • has_errors() — «есть ли ошибки?»

Функция может считаться предикатом, только если она возвращает булевы значения True или False.

Давайте напишем еще одну функцию-предикат. Она принимает строку и проверяет, является ли она словом 'Castle':

def is_castle(string):
  return string == 'Castle'

print(is_castle('Sea'))

Комбинирование операций и функций

Логические операции — это выражения. Значит, логические операции можно комбинировать с другими выражениями. Например, мы хотим проверить чётность числа, то есть кратность двум. В программировании используют такой подход: проверяют остаток от деления на 2:

  • если остаток 0, то число было чётным
  • если остаток не 0, то число было нечётным

Остаток от деления — простая, но очень важная концепция в арифметике, алгебре, и даже в теории чисел и криптографии. Идея проста: нужно разделить число на несколько равных групп, и если в конце что-то останется — это и есть остаток от деления.

Делим конфеты поровну между людьми:

  • 7 конфет, 2 человека: 2 x 3 + остаток 1 (значит, 7 не кратно 2)
  • 21 конфету, 3 человека: 3 x 7 + остаток 0 (значит, 21 кратно 3)
  • 19 конфет, 5 человек: 5 x 3 + остаток 4 (значит, 19 не кратно 5)

Оператор % вычисляет остаток от деления (не путайте с делением):

  • 7 % 21
  • 21 % 30
  • 19 % 54

Скомбинируем в одном выражении логический оператор == (проверка равенства) и арифметический оператор % и напишем функцию проверки чётности:

def is_even(number):
    return number % 2 == 0

print(is_even(10))  # => True
print(is_even(3))   # => False

Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение number % 2, затем результат участвует в логическом сравнении. По-русски это можно расшифровать так: «вычислить остаток от деления числа number на 2 и сравнить, равен ли остаток нулю, затем вернуть результат проверки равенства».

Другой пример: напишем функцию, которая принимает строку и проверяет, начинается ли эта строка с латинской буквы a.

Алгоритм:

  1. Получим и запишем в переменную первый символ из строки-аргумента.
  2. Сравним, равен ли символ латинской букве a.
  3. Вернём результат.
def is_first_letter_an_a(string):
    first_letter = string[0]
    return first_letter == 'a'

print(is_first_letter_an_a('orange'))  # => False
print(is_first_letter_an_a('apple'))   # => True

Попробуйте проговорить происходящее по-русски, аналогично тому, как мы расшифровывали процесс в примере с is_even() в начале урока.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»