📖 Когда на уроках математики говорят, что число делится без остатка — это значит, что результатом деления будет целое число, а остаток равен нулю.
В Python для таких случаев существует оператор (%), который вычисляет именно остаток от деления.
К примеру, 10 % 3 вернёт 1. Так как число 3 помещается в десяти три раза и в остатке единица →
- 10 : 3 = 3 (остаток 1)
📍Эта простая, но важная операция часто используется при работе с целыми числами. Например, при проверке делимости, разбиении данных на группы или других вычислениях.
Давайте разберёмся, как работает этот оператор и почему он так часто встречается в заданиях ЕГЭ ⤵
↓↓↓↓↓
Что такое ДЕЛ в Python?
когда натуральное число (n) делится без остатка на натуральное число (m)
Если число n делится на число m без остатка, это значит, что результат деления — целое число, а остаток равен нулю.
В языке Python для проверки делимости без остатка используется оператор (%). Он возвращает остаток от деления одного числа на другое.
Если результат равен нулю, значит, число действительно делится без остатка.
Примеры:
- 10 делится на 5 без остатка, потому что 10 ÷ 5 = 2 (остаток 0)
- 9 не делится на 4 без остатка, потому что 9 ÷ 4 = 2 (остаток 1)
Как ДЕЛ записывается в Python
В Python для записи ДЕЛ используется оператор (%) — он возвращает остаток от деления
Для вычисления остатка от деления в Python необходимо взять два числа (типа int) и поставить между ними знак (%). Python автоматически разделит одно число на другое и вернет остаток →
❕Оператор (%) позволяет определить, делится ли одно число на другое без остатка
Если при делении одного числа на другое в остатке получается 0 → числа являются кратными, то есть делятся без остатка
Реализуем программу на Python для проверка кратности двух чисел ⤵
Пояснение к алгоритму:
⇪ Пользователь вводит два числа — (x) и (y). Если одно число делится на другое без остатка, программа выведет сообщение о кратности. В противном случае появится уведомление, что деление произошло с остатком.
input() — встроенная функция в Python
- используется для получения данных от пользователя и последующей записи данных в переменную
- всегда возвращает строку (str), даже если было введено число
int(input()) — две подряд выполненные функции в Python
- Функция input() ждёт ввод пользователя с клавиатуры и возвращает строку (тип str)
- Функция int() преобразует строку (str) в целое число (тип int)
Знакомство с оператором ДЕЛ(n, m) прошло успешно 😉
→ Следующий этап — разбор реального задания из ЕГЭ по информатике ⤵
Условие задачи →
Необходимо внимательно прочитать условие задачи несколько раз
После прочтения условия, можно переходить к решению!
→ Начнём с самого первого шага — создания переменной в Python. Как правильно её объявить и какие значения выбрать?
- РЕШЕНИЕ ↓
Как записать А?
По условию задачи (А) — натуральное число ⤵
→ Чтобы правильно определить переменную (A), следует ответить на 2 основных вопроса:
- Какое значение выбрать для переменной (А)?
- Как данное значение записать в Python?
- Ответ на первый вопрос:
— Под переменной (A) в условии задачи понимается не конкретное число, а набор возможных значений
Точное значение для числа (А) в условии задачи не указано. Известно лишь, что (А) — это натуральное число. Из этого можно сделать вывод, что →
→ переменная (А) может быть равна любому натуральному числу (1, 2, 3, ... 15 ... 100 и так далее)
- Ответ на второй вопрос:
— Чтобы перебрать возможные значения переменной (A), можно воспользоваться циклом (for)
С помощью цикла (for), Python сам будет поочерёдно присваивать переменной (А) значения из заданного набора. Это позволит проверить все возможные варианты и найти подходящий.
- Как создать цикл for в Python?
Для написания алгоритма вы можете использовать любую удобную среду (IDLE, PyCharm или Visual Studio). Для начинающих программистов рекомендую использовать именно IDLE.
В качестве примера можно взять небольшой диапазон значений в range →
- range() — это встроенная функция в Python, которая генерирует последовательность чисел
❕Важные детали:
- Функция range() хранит в себе список чисел, который начинается с первого указанного в скобках числа и заканчивается числом, на единицу меньшим второго
- Конструкция for + range позволяют получить все необходимые варианты для переменной (А) и выбрать подходящий
- В языке Python можно создавать два типа циклов (for): возрастающий — от меньшего числа к большему, и убывающий — от большего к меньшему.
⚠ В данной задаче удобнее использовать убывающий цикл, поскольку требуется найти наибольшее значение переменной (A)
- Убывающий цикл for в Python:
- Конструкция убывающего цикла (for):
- Чтобы цикл шёл вниз, шаг (step) должен быть отрицательным ⤵
Основная программа будет начинается именно с убывающего цикла (for), который перебирает все возможные натуральные значения переменной (A).
→ Запишем первую строчку кода ⤵
💢 Основная программа:
⚠ Для дальнейшего решения необходимо ввести новую переменную — flag. Назначение этой переменной и принцип её работы будут разобраны в следующей главе. →
🚩 Переменная flag в Python
flag — имя переменной, которая имеет логический тип данных (bool)
В Python переменная flag — это условное обозначение, которое используется для хранения логического значения (True или False)
- flag — показывает, случилось ли что-то значимое для программы
- flag (чаще всего) — булева переменная (тип bool): либо False, либо True
Зачем нужен flag?
Флаг используется как 'сигнал' или 'индикатор'. Он может сообщать программе:
- Нужно ли продолжать выполнение какого-то действия?
- Случилось ли уже определённое событие?
- Разрешён ли следующий шаг в алгоритме?
- Выполнено ли условие?
❶ Пример
— Случилось ли уже определённое событие?
🔋В этой программе переменная flag используется как индикатор.
Пользователь вводит число с клавиатуры, которое сохраняется в переменную (x):
x = int(input('Введите число: '))
Затем цикл (for) перебирает значения от 1 до 9. Если введённое число совпадает с одним из них (i == x), выполняется условие (if) →
→ flag получает значение True → программа фиксирует данный момент.
С помощью переменной flag программа может зафиксировать важное событие, произошедшее во время выполнения кода
❷ Пример
— Выполнено ли условие?
🚧 Переменная (flag) помогает программе проверить, встречаются ли в списке отрицательные числа.
Что происходит:
- Сначала предположение, что отрицательных чисел нет (flag = True).
- Если встречается отрицательное число (if i < 0) — (flag) изменяется на (False).
- После цикла проверка текущего состояния переменной (flag) и последующий вывод.
В предыдущих примерах переменная flag могла принимать только два значения — True или False. Рассмотрим этот момент более подробно ⤵
2 основных состояния ↑↓
Переменная (flag) может находиться в двух основных состояниях
- flag = True (или 1) — флаг находится в поднятом состоянии (условие выполняется)
- flag = False (или 0) — флаг опущен, условие не выполняется
❕Переменная (flag) имеет только два состояния: True или False. Благодаря этому можно определить, произошло ли что-то важное в процессе работы программы. Если (flag) изменил значение → значит событие произошло!.
Аналогия с лампочкой:
💡Переменная (flag) — это лампочка. Если она загорается (True), значит в программе что-то произошло. Пока лампочка не горит (False) — этого ещё не случилось.
Для лучшего понимания переменной (flag) ниже приведены два примера ⤵
❶ Пример
🚫 Проверка доступа
⇪ В этой программе переменная (flag) используется для проверки правильности введённого пароля.
❌ Сначала (flag) установлен в (False), что означает — пароль пока неверный.
Затем введённое значение сравнивается с правильным паролем (x == vvod). Если они совпадают, (flag) принимает значение (True) → Событие произошло → Пароли совпали ✅
↑↓ Наглядная демонстрация двух состояний переменной (flag) ⤵
Переходим к следующей важной функции переменной (flag) →
flag для управления циклами FOR + WHILE
используется для создания определенных условий выхода из цикла
Переменная (flag) позволяет остановить выполнение циклов (for, while) заранее, когда это нужно пользователю.
❶ Пример
📛 Пока не введена строка — цикл (while) не завершится ⤵
В этом примере переменная flag используется для управления циклом (while).
Цикл продолжается до тех пор, пока пользователь не введет 'exit' → после чего (flag) устанавливается в (False) → цикл завершается
❷ Пример
C помощью переменной (flag) осуществляется досрочный выход из цикла (while) ⤵
⇥ В данной программе переменная (flag) используется для контроля досрочного завершения цикла (while). Когда (A) достигает значения 15, выполняется условие (if A = 15) и flag изменяется на 0.
- Цикл (while) будет работать до тех пор, пока значение flag равно 1
- Когда значение переменной (flag) изменяется, выполнение цикла прекращается
- После того, как (A) станет равным 15, цикл (while) завершится и программа остановиться
Промежуточные итоги:
🚥 Переменная (flag) играет роль индикатора. Данный индикатор уведомляет в нужный момент о выполнении определенного условия в программе.
С помощью переменной (flag) можно досрочно завершить цикл или проверить, было ли выполнено какое-то условие внутри него.
❕Важная деталь:
- Зачем использовать переменную (flag) в этой программе?
— (flag) необходим для фильтрации лишних значений. Это упростит работу программы и значительно ускорит её выполнение.
→ Теперь необходимо добавить (flag) в итоговое решение ⤵
💢 Основная программа:
Помимо переменной (A), в задаче присутствует и переменная (x). В следующей главе рассмотрим, как в Python правильно работать с двумя зависимыми переменными ⤵
Работа с двумя неизвестными переменными: (A) и (x)
По условию задачи и (А) и (х) — натуральные числа
Натуральные числа — это числа, которые используются для счёта предметов.
Натуральные числа должны быть целыми и начинаться с единицы: 1, 2, 3, 4 ... и так до бесконечности.
Ранее уже рассматривалось, как с помощью цикла (for) можно вывести натуральные числа в Python ⤵
- for A in range(1000, 0, -1)
- Как объявить сразу 2 неизвестные переменные в Python и (А) и (х)?
— Создать два цикла (for): для переменной (А) и переменной (х)
❕В данной программе ⇪ циклы (for) выполняются отдельно друг от друга
На экран выводятся значения переменных (A) и (x), которые изменяются отдельно друг от друга и не связаны между собой.
Сначала отображаются значения для переменной (А) : 10, 9, 8, 7 и лишь потом отображаются значения для (х): 14, 13, 12, 11 →
Это значит, что:
❕Если использовать два отдельных цикла (for), переменные (A) и (x) не будут связаны между собой
- В чём заключается важность этого момента и как он влияет на решение задачи?
Для ответа на вопрос необходимо ещё раз внимательно посмотреть на условие задачи:
- На что обратить внимание:
Для какого наибольшего натурального числа А формула ... тождественно истинна (т. е. принимает значение 1 при любом натуральном значении переменной x)?
- Что здесь ⇪ имеется в виду?
Для решения задачи нужно подобрать максимальное значение для переменной (A), чтобы при любом значении переменной (x) формула оставалась верной
- Работу алгоритма можно описать так:
Выбираем некоторое значение (A) и проверяем его на всех вариантах переменной (x). Если для всех (x) условие верно (формула истинна), то найденное значение (A) и является решением задачи ⤵
- Как это сделать в Python?
— Использовать двойные (вложенные) циклы, вместо двух отдельных циклов ⤵
Двойные циклы в Python
это структура, которая позволяет выполнять один цикл внутри другого
Пример двойного цикла ⤵
Объяснение к коду ⇪:
- Запуск внешнего цикла → А = 3
- Запуск вложенного цикла для переменной (х)
- Внутренний цикл проходит все свои значения (х = 10, х = 11, x =12)
- Когда внутренний цикл закончился, внешний цикл делает шаг → А = 2
- Снова запускается внутренний цикл (х = 10, х = 11, x =12)
- И так пока внешний цикл не закончится.
На каждое новое действие внешнего цикла — внутренний цикл делает всё сначала
- Создание таблицы умножения с помощью двойного цикла for ⤵
- Первый цикл (i) идёт по строкам (числа 1…8)
- Второй цикл (j) идёт по столбцам
- В каждой паре (i, j) выводится на экран произведение: i * j
- Так получается вся таблица — 8×8 = 64 комбинации
→ Вложенный цикл выполняется многократно внутри внешнего
❕Важная деталь:
✖ Двойные циклы увеличивают время работы программы! Например, если внешний цикл повторяется 1000 раз, а внутренний 1000 раз, то получится 1 000 000 итераций!
- Разница между одиночными и двойными циклами в Python:
Двойной цикл в Python — когда один цикл находится внутри другого.
Внутренний цикл выполняется полностью для каждого шага внешнего.
🔑 Двойной цикл (for) — ключ к решению данной задачи. Ведь именно он позволяет перебрать все варианты переменной (х) для каждого нового значения переменной (А)
→ Теперь необходимо добавить вложенный цикл (for) для переменной (х) в итоговое решение ⤵
💢 Основная программа:
→ Следующий этап решения связан с логической формулой из условия. Необходимо переписать формулу на язык Python и подобрать для этого нужные операторы ⤵
Как записать логическую формулу в Python?
— по условию задачи, логическая формула должна быть тождественно истина при любом натуральном значении (х)
Что такое тождественно истинная формула?
Формула называется тождественно истинной, если она всегда верна,
при любых значениях переменных, которые в неё можно подставить.
📘 Другими словами:
Неважно, какое число будет подставлено в формулу — результат всегда будет «истина» (или 1).
Теперь вернёмся к самой формуле →
- Для правильной записи формулы необходимо каждый логический оператор перевести на язык Python ⤵
❕Важная деталь:
Выражение ¬ДЕЛ(m, n) можно записать в Python двумя способами:
- С помощью логического оператора НЕ РАВНО (!=)
- С помощью отрицания (NOT) + проверки на равенство (==)
→ Перед тем как записать основную формулу в программе, разберём подробнее одну из логических операций ⤵
ЧТО ТАКОЕ ДИЗЪЮНКЦИЯ?
Дизъюнкция — это логическая операция (логическое ИЛИ)
Читается: «А ИЛИ В», «А плюс В», «А or B»
Обозначения: V (Алгебра логики), or (Python), ИЛИ, U (для множеств)
→ Дизъюнкция — это такое логическое слово, которое означает по смыслу слово ИЛИ
Смысл логического ИЛИ — это «ИЛИ одно, ИЛИ другое, ИЛИ оба сразу».
- Дизъюнкция позволяет ответить на вопрос:
«Хотя бы одно из заданных условий верно?» — если да, то результат считается истинным.
✖ Если все логические выражения ложны, результат будет False
✅ Если хотя бы одно из выражений истинно, результат будет True
«ИЛИ» — это как «хотя бы одно да»
(если хоть одно утверждение верно — всё выражение верно)
ДИЗЪЮНКЦИЯ В PYTHON
Используется для проверки нескольких условий
Рассмотрим два примера, для лучшего понимания дизъюнкции в Python ⤵
❶ Пример с вводом данных
Данный код выполняет проверку вводимых данных. Пользователь вводит строку, которая записывается в переменную (login). Далее возможны 2 варианта:
- Если логин (login) равен 'admin' или 'boss', то доступ будет открыт. То есть пользователь ввел правильную строку.
- Если будет введен 'не правильный' логин, любой кроме (admin) или (boss), то программа выдаст сообщение: 'Доступ запрещён!'
С помощью оператора (or) можно задать несколько возможных условий ввода (admin, boss, main и так далее). Если хотя бы одно из них истинно, будет выполнен код внутри (if) → на экране появится надпись: 'Доступ разрешён'
❷ Для проверки нескольких условий
Дизъюнкция часто используется в условных операторах для проверки нескольких условий.
С клавиатуры вводится число, которое записывается в переменную (a). От того, какое значение введено, зависит дальнейший вывод программы ⤵
→ Когда введённое число (а) будет меньше 0 или больше 10, то оно не будет находится внутри диапазона [0; 10]. В таком случае, на экране появится надпись: 'Число ВНЕ диапазона от 0 до 10'
✖ Если оба условия ложны, то число лежит внутри этого диапазона.
Таким образом, с помощью дизъюнкции можно проверить сразу несколько условий одновременно.
→ Следующий шаг — использовать таблицу перевода логических операторов на язык Python. Записать каждый оператор в формулу, соблюдая порядок действий и скобки.
Вся логическая формула будет записана в отдельную переменную:
f — переменная для записи (хранения) формулы
💢 Основная программа:
❕Пояснения к основному коду программы:
- При создании итоговой формулы в Python лучше выбрать первый способ для записи выражения [¬ДЕЛ(m, n)]
x % A != 0
Данная запись практичнее и требует меньше кода ⤵
- При создании функции (f) необходимо правильно расставить скобки: каждое выражение должно быть записано в соответствующих скобках.
→ На следующем этапе рассматривается метод, который позволит сделать работу программы быстрее и эффективнее. Данный метод связан с переменной (flag) ⤵
Pruning метод
— метод "отбраковки" или "отсева"
Метод отсева — это стратегия (приём). Данный метод предполагает проверку и исключение заведомо «плохих» решений. Благодаря этому алгоритм работает только с подходящими вариантами.
→ Таким образом программа не тратит ресурсы и время на рассмотрение неподходящих вариантов.
⚠ Ключ pruning метода — переменная (flag)
Если значение функции оказывается ложным (f = 0), то (flag) принимает значение False (опускается или лампочка перестаёт гореть) →
→ Далее срабатывает команда (break) и присходит выход из внутреннего цикла (for) ⤵
Алгоритм не проверяет каждое значение подряд, а сразу исключает неподходящие →
✔ Программа работает быстрее и эффективнее.
3 этапа метода Puring
чтобы метод сработал, будем считать функцию (f) равной 0 (f = 0)
▪Pruning метод — 1 этап
Проверка логической функции (f) на истинность при текущих значениях переменных (А) и (х).
✖ если функция (f) истинна (True), то переход к новому значению (х) — не выполняется, так как (f = 0)
✔ если функция Ложна (False) — переход ко второму этапу ⤵
▪Pruning метод — 2 этап
При текущем значении переменной (x) функция (f) обращается в ноль, следовательно, значение (A) не подходит, и флаг устанавливается в False (опускается) ⤵
❕Важная деталь:
Переменная (flag) принимает значение (False), чтобы алгоритм не использовал текущее значение (A) как решение.
▪Pruning метод — 3 этап
Выполняется команда (break) →
Происходит выход из внутреннего цикла (for) →
❓В чём конкретно проявляется метод pruning
ответ: в трёх строках алгоритма
Без использования оператора (break) программа проверяла бы все 1000 значений (x) для каждого (А). Даже если уже на первом шаге ясно, что текущее (A) не подходит.
Но, благодаря данному фрагменту:
✔ Дальнейшие проверки прекращаются, а ветвь решения с данным значением (A) сразу отбрасывается →
Это и есть раннее отсечение неподходящих вариантов → типичный пример метода pruning.
→ Теперь необходимо добавить puring метод в основную программу ⤵
💢 Основная программа:
- Интересный вопрос:
❓Будет ли работать программа без pruning метода
— Да, программа может работать и без pruning метода
Но, такой подход снижает производительность программы ↓
Алгоритм продолжает перебирать все значения переменной (x) для каждого (A), даже когда результат уже очевиден. В итоге возрастает и время работы, и потребляемая память.
Поэтому, лучше использовать pruning метод при решении данной задачи 😉
→ До полного решения остается совсем немного. Следующий этап про подбор подходящего значения для переменной (А) ⤵
Как выбрать верное значение для А?
Каким образом программа решит, что найденное значение — верное?
→ Чтобы программа выбирала только правильные варианты, нужно использовать команду — if
- if — это оператор ветвления (служебное слово в Python)
→ Данный оператор позволяет программе принять решение и выполнить разные части кода в зависимости от условия. «Если условие истинно — делаем это, иначе — делаем другое».
Чтобы лучше понять, как работает оператор (if) в Python, ниже приведены три примера ⤵
❶ Пример
Пусть переменной (A) присвоено значение 5. Запускается цикл (for) от 1 до 9. Если значение (x) оказывается больше (A), программа выводит сообщение на экран.
Оператор (if) помогает выбрать только те значения, которые больше переменной (A) ⤵
→ Во второй части кода выполняется проверка условия (А > 0): если значение (A) положительное, на экран выводится сообщение.
❷ Пример
☑ Проверка чётности числа
В этой программе ⇪ также используется оператор (else). Данный оператор сработает, если условие в (if) не выполнилось.
❸ Пример
☑ Проверка логина и пароля
Пользователь вводит свои данные. Если введённые значения совпадают с теми, что указаны в условии (if), доступ открывается. Иначе появляется сообщение: «Неверный логин или пароль».
Если условие истинно (True), то программа выполнит код, находящийся внутри блока if
📍Остаётся добавить проверку условия в основной алгоритм — и решение готово →
🔥Итоговая программа
Решение Задание №15 ЕГЭ "Побитовая конъюнкция" ⤵
❕Перед запуском программы проверьте получившийся код :
- корректность отступов (после циклов и условий)
- правильность знаков, логических операторов и расстановка скобок
В случае ошибки используйте данный код как образец →
Если после запуска программы на экране появится нужный результат (12), то →
👏 Мои поздравления! Получен верный ответ и программа работает без ошибок. Отличная работа!
🔥🔥🔥
🔜 Для лучшего понимания данной темы советую познакомиться с ещё одной разновидностью задач №15 ЕГЭ — «Поразрядная конъюнкция» ⤵
💾 Побитовые операции — это особый способ работы с двоичными числами
📍Среди всех побитовых операций особое место занимает поразрядная (побитовая) конъюнкция. Данная операция сравнивает каждый бит числа и ...
Альтернативные способы решения задачи
Общая структура алгоритма остаётся неизменной: используются циклы (for), метод (pruning) и переменная (flag). Различия касаются лишь того, как именно будут записаны отдельные участки кода.
↻ Решение с использованием списка (list)
Для поиска нибольшего / наименьшего значения можно использовать список (list)
Алгоритм решения:
- Добавление подходящего значения (А) в список с помощью команды (append)
- Вызов команды max() и вывод результата на экран ⤵
→ С помощью встроенных функций max() и min() Python может автоматически определить наибольшее или наименьшее значение в списке.
Например, в данной задаче был получен следующий список:
my = [12, 6, 4, 3, 2, 1]
Каждый элемент этого списка может быть потенциальным ответом. Поскольку нужно выбрать максимальное значение, вызов функции max(my) вернёт 12, что и будет правильным результатом.
Подробнее о работе со списками в Python вы можете узнать в следующем материале ⤵
😉 Good job! Keep it up! Good luck!