5.2. Практикум¶
Примечание
При выполнении заданий используйте заготовки решений: ->
Репозиторий.
Подробнее: см. Цикл выполнения и защиты заданий.
Примечание
При решении задач данного раздела обратите внимание:
для каждой задачи данного раздела сначала создаются функции, а затем, используя их, выполняется решение задачи;
ввод и вывод данных для функции необходимо обеспечить самостоятельно;
для каждой написанной функции нужно:
избегать побочного эффекта;
использовать строки документации;
при выводе вещественных результатов оставьте два знака после запятой.
В заданиях, где функции используются несколько раз, подумайте, насколько бы увеличился объем кода без их использования.
5.2.1. Глобальные и локальные функции¶
№ 5.2.1
Определите значение \(z = \cfrac{sgn(x) + y^2}{sgn(y) - \sqrt{|x|}}\), где sgn - сигнум-функция, а \(x\) и \(y\) - вещественные числа:
№ 5.2.2
Дан список температурных изменений в течение дня (целые числа). Известно, что измеряющее устройство иногда сбоит и записывает отсутствие температуры (значение None
).
Выведите среднюю температуру за наблюдаемый промежуток времени, предварительно очистив список от неопределенных значений. Гарантируется, что хотя бы одно определенное значение в списке есть.
№ 5.2.3
Выведите все счастливые номера билетов в диапазоне от \(a\) до \(b\) (положительные целые числа, \(a < b\)), если известно, что счастливым считается номер, у которого количество четных цифр равно количеству нечетных.
№ 5.2.4
Дата характеризуется тремя натуральными числами: день, месяц и год. Учитывая, что год может быть високосным, реализуйте две функции, которые определяют вчерашнюю и завтрашнюю дату.
№ 5.2.5
В задаче № 5.2.4 замените функции получения вчерашней и завтрашней даты на одну:
def another_date(day, month, year, delta=1):
pass
где delta
- ключевой параметр, определяющий сколько дней необходимо добавить или вычесть (если аргумент отрицательный) из переданной даты. Функции, реализованные в задаче № 5.2.4 сделайте локальными для another_date()
, вызывая их внутри необходимое количество раз.
№ 5.2.6
Дан список из чисел.
Определите их НОК (наименьшее общее кратное) и НОД (наибольший общий делитель).
№ 5.2.7
Даны \(n\) предложений. Определите, сколько из них содержат хотя бы одну цифру.
№ 5.2.8
Дана строка \(s\) и символ \(k\). Реализуйте функцию, рисующую рамку из символа \(k\) вокруг данной строки, например:
***************
*Текст в рамке*
***************
№ 5.2.9
Напишите функции для перевода числа (\(N \in \left [ 2; 16 \right ]\)):
из 10-й системы счисления в N-ю;
из N-й системы счисления в 10-ю.
№ 5.2.10
Для введенного предложения выведите статистику символ=количество
. Регистр букв не учитывается.
№ 5.2.11
Используя шифр Цезаря (достаточно только букв русского алфавита, знаки препинания не изменяются), зашифруйте, а затем расшифруйте введенную строку.
№ 5.2.12
В вагоне-купе имеется некоторое количество купе, в каждом из которых по 4 места. Разработчик хранит информацию о занятости одного купе в виде словаря:
{1: 'м', 2: None, 3: None, 4: 'ж'}
где:
ключ определяет номер места (нечетные номера - нижние места, четные - верхние);
значение может быть одно из трех:
None
,"м"
и"ж"
, если место не занято, занято мужчиной или женщиной соответственно.
Информация о занятости всего вагона хранится как список указанных словарей.
Определите:
список полностью свободных купе;
список свободных мест в вагоне;
список свободных нижних или верхних мест;
список свободных мест в купе с исключительно мужской компанией;
список свободных мест в купе с исключительно женской компанией.
Совет
Купе считается с исключительно мужской компанией, если:
занято хотя бы одно место;
все несвободные места заняты мужчинами.
№ 5.2.13
Дан список с результатами голосования на выборах в виде:
[1, 3, 2, 2, 2, 5, -1, ...]
где номер определяет голос за партию из списка:
1. Партия №1.
2. Партия №2.
3. Партия №3.
4. Партия №4.
5. Партия №5.
-1. Испорченный бланк.
Подведите итоги выборов, выведя на экран список партий в соответствии с убыванием количества полученных голосов и их процентным соотношением:
1. Партия №2 | 1111 | 58.21%
2. Партия №4 | 999 | 38.14%
...
5.2.2. Упаковка и распаковка аргументов¶
№ 5.2.14
Напишите функцию, которая принимает неограниченное количество числовых аргументов и возвращает кортеж из двух списков:
отрицательных значений (отсортирован по убыванию);
неотрицательных значений (отсортирован по возрастанию).
№ 5.2.15
Валовой внутренний продукт может определяться по расходам:
\[Y = C + I + G + E{x} - I{m},\]
где:
\(C\) - конечное потребление;
\(I\) - валовое накопление капитала (инвестиции в фирму, то есть покупка станков, оборудования, запасов, места производства);
\(G\) - государственные расходы;
\(E{x}\) - экспорт;
\(I{m}\) - импорт.
Все величины - целые числа.
Выполните:
введите с клавиатуры все 5 значений формулы и сохраните их в список и словарь вида
{'c': 3, 'i': 1, ..., 'im': 2}
напишите функцию для вычисления ВВП, которая содержит 5 параметров, соответствующих формуле;
используя распаковку аргументов, вызовите функцию с данными введенных списка и словаря и выведите их на экран.
5.2.3. Рекурсия¶
№ 5.2.16
Составьте две функции для возведения числа в степень: один из вариантов реализуйте в рекурсивном стиле.
№ 5.2.17
Дано натуральное число. Напишите рекурсивные функции для определения:
суммы цифр числа;
количества цифр в числе.