Найти тему
Заметки по Python

Основы Python. Часть 7

Оглавление

Задача 1. Challenge 2

Вдохновившись мотивацией Антона, ваш друг тоже решил поставить перед собой задачу, но не сильно связанную с математикой, а именно: написать функцию, которая выводит все числа от 1 до num без использования циклов. Помогите другу реализовать такую функцию.

Задача 2. Свой zip 2

Написав аналог функции zip на собеседовании, вы вспомнили, что этот код можно сделать даже лучше, и резко вырвали листок с кодом из рук работодателя, оставив его в недоумении.

Напишите функцию, которая будет являться аналогом функции zip и сделайте так, чтобы программа работала с любыми итерируемыми типами данных.

  • Нельзя пользоваться циклами (за исключением генераторов), условными операторами и функциями определения типа (isinstance или type).
  • Функция должна возвращать список с кортежами, в котором n-ый кортеж состоит из n-ых элементов всех последовательностей. Например, десятый кортеж будет содержать десятый элемент каждой из переданных последовательностей
-2

Задача 3. Ряд Фибоначчи

Числа Фибоначчи — это ряд чисел, в котором каждое следующее число равно сумме двух предыдущих: 1, 1, 2, 3, 5, 8, 13…

Пользователь вводит num_pos. Напишите функцию, которая выводит число, стоящее на позиции num_pos в ряде Фибоначчи.

-3

Задача 4. Поиск элемента 2

Пользователь вводит искомый ключ. Если он хочет, то может ввести максимальную глубину — уровень, до которого будет просматриваться структура.

Напишите функцию, которая находит заданный пользователем ключ в словаре и выдаёт значение этого ключа на экран. По умолчанию уровень не задан.

-4

Задача 5. Ускоряем работу функции

У нас есть функция, которая делает определённые действия с входными данными:

  1. берёт факториал от числа;
  2. результат делит на куб входного числа;
  3. получившееся число возводит в 10-ю степень.

Однако каждый раз нам приходится делать сложные вычисления, хотя входные и выходные данные одни и те же. И тут наши знания тонкостей Python должны нам помочь.

Оптимизируйте функцию так, чтобы высчитывать факториал для одного и того же числа только один раз.

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

-5

Задача 6. Глубокое копирование

Вы сделали для заказчика структуру сайта по продаже телефонов.

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

Напишите программу, которая запрашивает у клиента, сколько будет сайтов, а затем запрашивает название продукта и после каждого запроса выводит на экран активные сайты.

Условия: структуру сайта нужно описать один раз, копипасту никто не любит.

Подсказка: используйте рекурсию.

-6

Задача 7. Продвинутая функция sum

Как вы знаете, в Python есть полезная функция sum, которая умеет находить сумму элементов списков. Но иногда базовых возможностей функций не хватает для работы и приходится их усовершенствовать.

Напишите свою функцию sum, которая должна быть более гибкой, чем стандартная функция sum. Она должна уметь:

  • складывать числа из списка списков;
  • складывать числа из набора параметров.
-7

Задача 8. Список списков 2

Вы уже работали с многомерными списками и решали задачи, где с помощью list comprehensions «выпрямляли» многомерные списки в один. Однако такой фокус не пройдёт, если у элементов разные уровни вложенности и этих списков неограниченное количество.

Напишите рекурсивную функцию, которая раскрывает все вложенные списки, то есть оставляет только внешний список.

Подсказка: можно возвращать списки и срезы списков.

-8

Задача 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.

Совет: Для начала определите номер промежуточного колышка. Для этого подумайте о сумме трех чисел колышка.

-9

Наука
7 млн интересуются