Упражнение №5 — это задание базового уровня. Цель задания — оценить способности экзаменуемого в написании и изучении простых алгоритмов.
⏰ Время на выполнение — 4 минуты. Задание оценивается в 1 балл.
❗ПЕРЕД ПРОЧТЕНИЕМ НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ОЗНАКОМИТЬСЯ С ПОДРОБНЫМ РЕШЕНИЕМ БАЗОВЫХ ТИПОВ ЗАДАНИЯ №5 ⤵
- I часть (Посимвольное двоичное преобразование)
- II часть (Посимвольное десятичное преобразование)
Если вы уже хорошо знакомы с этим материалом или уверенно разбираетесь в заданиях №5, то можете приступить к разбору сложной задачи ⤵
📥 Условие задачи →
Необходимо составить план решения. Разбить условие задачи на несколько основных этапов →
Подробно разберем каждый из этапов решения ⤵
➀ Алгоритм получает на вход натуральное число N
Натуральные числа — это числа, которые используются для счета предметов или вещей.
- Как получить натуральные числа в Python?
— Использовать цикл for() + функцию range()
Цикл for() + range() позволяют получить все необходимые варианты натуральных чисел и выбрать подходящий.
📥 Для написания алгоритма вы можете использовать любую удобную среду (IDLE, PyCharm или Visual Studio). Для начинающих программистов рекомендую использовать именно IDLE.
В качестве примера можно взять небольшой диапазон значений в range →
Более детально с принципами работы цикла for() вы можете ознакомиться в данном материале ⤵
→ Запишем первую строчку кода в итоговое решение ⤵
📍Основная программа:
Переходим к следующему этапу →
➁ Строится двоичная запись числа N
Двоичная запись числа — это способ представления чисел, используя только две цифры: 0 и 1
Как перевести в 2 СС Python?
— Использовать встроенную функцию bin()
📥Как работает функция bin()?
- Вы задаёте целое число. Это число будет преобразовано в двоичный формат.
- Python применяет функцию bin() к этому числу. Функция возвращает строку, которая начинается с префикса '0b'.
📍Теперь необходимо добавить функцию bin() в основную программу:
Переходим к следующему этапу →
③ В полученной записи все нули заменяются на единицы, все единицы — на нули.
111000 → 000111
- Как заменить символы в Python?
— Использовать встроенный метод replace()
→ Метод replace в Python
— заменяет указанный символ или подстроку на новую
Синтаксис метода:
str.replace(old, new, k)
- str — строка, к которой применяется метод
- old — заменяемый символ или подстрока
- new — символ или подстрока, на которую происходит замена
- k (необязательный параметр) — максимальное количество замен
Примеры использования метода replace():
Если указать параметр (k = 1) в методе replace(), то произойдёт всего одна (первая) замена переменной
→ Замена символов с помощью метода replace
Попробуем выполнить замену символов в строке '1110011' с помощью replace() ⤵
— Программа работает... но ответ получился неправильный '0000000'
❗Если использовать метод replace() таким образом, то всегда будет получаться НЕПРАВИЛЬНЫЙ ОТВЕТ: либо все нули, либо все единицы.
- Почему не получилась строка '0001100'?
- Программа сначала заменяет все нули на единицы:
'1110011' → '1111111'
После первой замены символов, новое значение строки (а) будет состоять только из единиц: '1111111' - Следующий шаг программы: замена всех единицы на нули:
'1111111' → '0000000'
Так как строка состоит из всех единиц, то на выходе получится строка из всех нулей.
- Как правильно использовать replace()?
— Необходимо дополнительно ввести временный (буферный) символ
Это может быть любой символ, кроме '1' и '0'. В данном примере используется символ '*' в качестве буферного.
☑ Правильный алгоритм замены символов:
☑ Алгоритм работает корректно. Из строки '1110011' получилась строка '0001100'
→ Временный символ '*' помогает методу replace() не заменять сразу все встречающиеся символы. Буферный символ дает возможность скрыть нужные символы для последующей замены.
- Пример алгоритма с использованием временного символа '2' ⤵
☑ Программа работает верно. Из строки '0011001' получилась строка '1100110'
📍Теперь необходимо добавить replace() в основную программу:
🔒Проверка кода
На экран необходимо вывести значение переменной (n) в 2 СС, до и после замены символов ↓
☑ Алгоритм работает! Все символы заменяются корректно:
- до замены: 10010
- после замены: 01101
Переходим к следующему этапу →
④ Из полученного числа удаляются ведущие нули
00111001 → 111001
- Что значит ведущие нули?
— Это нули, которые стоят перед значащими цифрами в числе (011, 00011)
- Как появились ведущие нули?
— На предыдущем шаге, при замене символов (replace)
Если число начинается с символа 1 (например: 100, 11110, 110100), то при замене символов в этом числе появятся ведущие нули.
100 → 011
11110 → 00001
- Обязательно ли удалять ведущие нули?
⭕ В ДАННОЙ ЗАДАЧЕ ВЫ МОЖЕТЕ НЕ УДАЛЯТЬ ВЕДУЩИЕ НУЛИ
На следующем шаге необходимо перевести число в десятичную систему счисления, с помощью функции int().
Функция int() автоматически убирает ведущие нули при переводе в 10 СС. Даже если в числе есть ведущие нули, они не окажут влияния на результат.
Поэтому данный пункт можно пропустить и перейти к следующему →
⑤ Результат переводится в десятичную систему счисления
int('111001') = 57
- Как перевести число в 10 СС?
— Использовать встроенный метод int()
- Как работает метод int() в Python?
Синтаксис: int(x, base)
- x — значение, которое нужно преобразовать в целое число (str)
- base — основание системы счисления (от 2 до 36)
📥Пример перевода из 2 СС в 10 СС с помощью метода int() ⤵
❗Важное правило:
Для корректного перевода в 10 СС с помощью встроенной функции int(), число должно быть строчного типа (str)
📍Теперь необходимо реализовать данный алгоритм в основной программе ⤵
🔒Проверка кода
Переходим к следующему этапу →
⑥ Результатом работы алгоритма становится разность исходного числа N и числа, полученного на предыдущем шаге.
Результат: N - R
- Что значит: "исходное число N"?
— Переменная (n), которая используется в цикле for
- Что значит: "число, полученное на предыдущем шаге"?
— Это число (r). Оно получено из числа (n) после всех преобразований (замены цифр, удаления ведущих нулей и переводе в 10 СС)
- Что значит "в результате работы алгоритма"?
— Это число, которое будет получено после завершения алгоритма
В данной задаче под результатом подразумевается разность исходного числа (n) и числа, полученного после всех преобразований (r)
📍Данный этап является промежуточным, поэтому основная программа не требует изменений.
Необходимо выполнить проверку кода и вывести на экран разницу значений (n - r) →
🔒Проверка кода
Следующий этап →
⑦ Пример. Дано число N = 22
В результате работы алгоритма должно получиться число: R = 13
- Для чего в условии задачи записан данный пример?
— Данный пример служит для проверки работы алгоритма
Перед тем как записать последний пункт решения, нужно протестировать программу. Совпадение результатов — хороший показатель правильности алгоритма.
❗Иногда ответ может совпасть с указанным в условии, но сам алгоритм будет содержать ошибки.
☑ Результат работы алгоритма совпал с результатом из условия задачи.
- range(22, 23) — данный промежуток отображает только одно число это 22
- print(n - r) — вывод разности чисел (n) и (r) на экран
Следующий этап →
⑧ При каком наименьшем N в результате работы алгоритма получится R = 999?
Если значение r = 999, то программа выводит на экран текущее значение (n). Если нет — алгоритм продолжит дальше искать необходимое число.
- Как в Python выбрать число, подходящее под определенные условия?
— Использовать встроенную конструкцию (if)
С помощью условия (if) можно написать код, который сам бы отсеивал не нужные варианты.
Добавляем проверку на условие в алгоритм (if) и решение готово →
🔥Итоговая программа
Ответ: 1011
👏 Поздравляю! Получен верный ответ и программа работает без ошибок
⚠ Про break
Оператор break используется для немедленного выхода из цикла. Это может быть полезно, когда вы хотите остановить выполнение цикла при выполнении определенного условия.
↻ Как удалить ведущие нули в Python?
Задача со звездочкой 😏
- Метод lstrip()
lstrip — это метод для работы со строками в Python. Данный метод удаляет указанные символы с левой стороны (начала) строки.
Синтаксис
str.lstrip('chars')
- str — это строка, к которой применяется метод.
- 'chars' — это необязательный параметр. Это символы, которые необходимо удалить. Без этого параметра, lstrip() будет удалять только пробелы.
→ Важные моменты:
- lstrip() не изменяет оригинальную строку. В Python строки иммутабельны (неизменяемы), поэтому метод возвращает новую строку.
- lstrip() лишь удаляет символы в начале строки, а не в конце или середине.
Теперь необходимо добавить lstrip() в основную программу ⤵
❗При добавлении метода lstrip() в программе возникает ошибка. Это связано с тем, что в следующей строке переменная (х) преобразуется в десятичную систему счисления.
Если (х) будет равен 0 (00, 000 и так далее), Python удалит все символы '0', и в функцию int() попадёт пустая строка. В результате программа завершится с ошибкой, поскольку int() не может обработать пустую строку.
- Как исправить ошибку?
— Добавить условие (if). Дополнительная проверка.
→ В условии нужно указать, чтобы строка (х) обязательно содержала символ '1'. Это гарантирует, что даже после удаления всех ведущих нулей строка не будет пустой.
- Как указать, чтобы строка содержала символ '1'?
— Использовать метод count()
Итоговая программа + метод lstrip ⤵
Отлично! Теперь программа работает без ошибок.
😉 Good job! Keep it up! Good luck!
⬇Ещё материалы по теме Python: