Задача 1. Challenge 2
Вдохновившись мотивацией Антона, ваш друг тоже решил поставить перед собой задачу, но не сильно связанную с математикой, а именно: написать функцию, которая выводит все числа от 1 до num без использования циклов. Помогите другу реализовать такую функцию.
Задача 2. Свой zip 2
Написав аналог функции zip на собеседовании, вы вспомнили, что этот код можно сделать даже лучше, и резко вырвали листок с кодом из рук работодателя, оставив его в недоумении.
Напишите функцию, которая будет являться аналогом функции zip и сделайте так, чтобы программа работала с любыми итерируемыми типами данных.
- Нельзя пользоваться циклами (за исключением генераторов), условными операторами и функциями определения типа (isinstance или type).
- Функция должна возвращать список с кортежами, в котором n-ый кортеж состоит из n-ых элементов всех последовательностей. Например, десятый кортеж будет содержать десятый элемент каждой из переданных последовательностей
Задача 3. Ряд Фибоначчи
Числа Фибоначчи — это ряд чисел, в котором каждое следующее число равно сумме двух предыдущих: 1, 1, 2, 3, 5, 8, 13…
Пользователь вводит num_pos. Напишите функцию, которая выводит число, стоящее на позиции num_pos в ряде Фибоначчи.
Задача 4. Поиск элемента 2
Пользователь вводит искомый ключ. Если он хочет, то может ввести максимальную глубину — уровень, до которого будет просматриваться структура.
Напишите функцию, которая находит заданный пользователем ключ в словаре и выдаёт значение этого ключа на экран. По умолчанию уровень не задан.
Задача 5. Ускоряем работу функции
У нас есть функция, которая делает определённые действия с входными данными:
- берёт факториал от числа;
- результат делит на куб входного числа;
- получившееся число возводит в 10-ю степень.
Однако каждый раз нам приходится делать сложные вычисления, хотя входные и выходные данные одни и те же. И тут наши знания тонкостей Python должны нам помочь.
Оптимизируйте функцию так, чтобы высчитывать факториал для одного и того же числа только один раз.
Подсказка: вспомните, что происходит с изменяемыми данными, если их выставить по умолчанию в параметрах функции.
Задача 6. Глубокое копирование
Вы сделали для заказчика структуру сайта по продаже телефонов.
Заказчик рассказал своим коллегам на рынке, и они тоже захотели такой сайт, только для своих товаров. Вы посчитали, что это лёгкая задача, и быстро принялись за работу.
Напишите программу, которая запрашивает у клиента, сколько будет сайтов, а затем запрашивает название продукта и после каждого запроса выводит на экран активные сайты.
Условия: структуру сайта нужно описать один раз, копипасту никто не любит.
Подсказка: используйте рекурсию.
Задача 7. Продвинутая функция sum
Как вы знаете, в Python есть полезная функция sum, которая умеет находить сумму элементов списков. Но иногда базовых возможностей функций не хватает для работы и приходится их усовершенствовать.
Напишите свою функцию sum, которая должна быть более гибкой, чем стандартная функция sum. Она должна уметь:
- складывать числа из списка списков;
- складывать числа из набора параметров.
Задача 8. Список списков 2
Вы уже работали с многомерными списками и решали задачи, где с помощью list comprehensions «выпрямляли» многомерные списки в один. Однако такой фокус не пройдёт, если у элементов разные уровни вложенности и этих списков неограниченное количество.
Напишите рекурсивную функцию, которая раскрывает все вложенные списки, то есть оставляет только внешний список.
Подсказка: можно возвращать списки и срезы списков.
Задача 9. Ханойские башни
Ниже представлен текст одной из классических головоломок и по совместительству алгоритмических задач по программированию. С ней знакомы многие, в том числе те, кто с программированием никак не связан.
Головоломка «Ханойские башни» состоит из трёх стержней, пронумерованных числами 1, 2, 3. На стержень 1 надета пирамидка из N дисков различного диаметра в порядке возрастания диаметра. Диски можно перекладывать с одного стержня на другой по одному, при этом диск нельзя класть на диск меньшего диаметра.
Необходимо переложить всю пирамидку со стержня 1 на стержень 3 за минимальное число перекладываний.
Напишите программу, которая решает головоломку — для данного числа дисков N печатает последовательность перекладываний в формате A B C, где:
- A — номер перекладываемого диска;
- B — номер стержня, с которого снимается данный диск;
- C — номер стержня, на который надевается данный диск.
Например, строка 1 2 3 означает перемещение диска номер 1 со стержня 2 на стержень 3. В одной строке печатается одна команда. Диски пронумерованы числами от 1 до n в порядке возрастания диаметров.
Программа должна вывести минимальный (по количеству произведённых операций) способ перекладывания пирамидки из данного числа дисков.
Решение оформите в виде функции move (n, x, y), которая печатает последовательность перекладываний дисков для перемещения пирамидки высотой N со стержня номер X на стержень номер Y.
Совет: Для начала определите номер промежуточного колышка. Для этого подумайте о сумме трех чисел колышка.