🐍🧩 5 задач с решениями на Python для начинающих разработчиков
Освоили базу и руки чешутся испытать свои знания на практике? Ловите пять задачек на проверку своих знаний: пишем программу для перевода NRZI кода в двоичный, обнаруживаем лишние символы в строке, определяем «почти палиндром», создаем функцию для замены чисел на слова и находим лучшую покерную комбинацию.
1. Лишний символ
Безумный ученый нашел способ отправлять сообщения в будущее. Есть только две проблемы — иногда символы в каждом сообщении перемешиваются, и всегда добавляется ровно один лишний символ. Напишите программу, которая принимает две строки — исходное корректное сообщение и поврежденное доставленное, — и находит лишний символ.
Формат ввода:
Строка А — исходное сообщение.
Строка Б — доставленное сообщение.
Формат вывода:
Лишний символ в доставленном сообщении.
Решение
Способ 1:
Способ 2:
Способ 3:
2. Функция PythonGeek
Напишите функцию pythongeek(), которая принимает два целочисленных аргумента a и b (при этом a ≤ b), и возвращает строку, составленную из чисел от a до b включительно и слов Python, Geek и PythonGeek по следующим правилам:
- если число делится без остатка на 3, то вместо него в строку добавляется слово Python;
- если число делится без остатка на 7, то вместо него в строку добавляется слово Geek;
- если число делится без остатка и на 3, и на 7, то вместо него в строку добавляется слово PythonGeek;
- в остальных случаях в строку добавляется само число;
- числа и слова в формируемой строке разделяются пробелами.
Пример вызова функции:
Возвращаемая строка:
Решение
Задача кажется простой до момента возвращения значения функции — возвращать нужно именно строку с распакованными значениями (не элементы списка).
Способ 1:
Способ 2:
Способ 3:
3. NRZI кодирование
NRZI (Non Return to Zero Invertive) — один из способов линейного кодирования. Если имеется некое устройство, которое способно находиться лишь в двух различных состояниях, можно построить диаграмму состояний устройства на каждом такте с помощью двоичных 1 и 0. Напишите программу для перевода NRZI кода в двоичный: изменение состояния устройства в этом случае обозначается двоичной единицей 1, а неизменное состояние принимается за 0.
Формат ввода:
Строка NRZI кода, состоящая из символов _
, ‾
и |
.
Формат вывода:
Двоичный код.
Решение
Способ 1:
Способ 2:
Способ 3:
4. Почти палиндром
Строка текста, которую можно превратить в палиндром после удаления одной буквы, называется «почти палиндромом». Напишите программу, которая принимает на вход строку, состоящую из букв, цифр и специальных символов, и определяет, можно ли превратить строку в палиндром, удалив одну из букв. В строке гарантированно есть хотя бы две буквы.
Формат ввода:
Строка, состоящая из букв, цифр и символов.
Формат вывода:
True
, если строка является почти палиндромом, или False
– в противном случае.
Решение
Алгоритмы, основанные на срезах строк и проверке на палиндромность с помощью функции any (или [::-1]), позволяют решить эту задачу буквально в пару строк. Но выполнение такого кода занимает слишком много времени, и подобные алгоритмы, как правило, не проходят тесты на временные лимиты.
Способ 1:
Способ 2:
Способ 3:
5. Лучшая комбинация
Напишите программу, которая принимает на вход строку из 5 чисел от 1 до 13, представляющих собой номера карт, и выводит название лучшей комбинации, которую можно из этих карт составить. Валеты, дамы, короли и тузы обозначаются числами 11, 12, 13 и 1 соответственно.
Традиционные названия комбинаций в покере:
- 4 одинаковые карты – Каре;
- 3 одинаковые карты и 2 другие одинаковые карты – Фулл Хаус;
- 5 последовательно идущих карт – Стрит;
- 3 одинаковые карты – Сет;
- 2 одинаковые карты и 2 другие одинаковые карты – Две пары;
- 2 одинаковые карты – Пара;
- ничего из вышеперечисленного – Старшая карта.
Если в руке окажется 5 одинаковых карт – вывести Шулер.
Формат ввода:
Строка из 5 чисел от 1 до 13 через пробел – номера карт в руке.
Формат вывода:
Название лучшей комбинации карт.
Решение
Способ 1:
Способ 2:
Способ 3: