Задача 1. Ревью кода
Ваня работает middle-разработчиком на Python в IT-компании. Один кандидат на позицию junior-разработчика прислал ему код тестового задания.
В задании был словарь из трёх студентов. Необходимо:
- Вывести на экран список пар «ID студента — возраст».
- Написать функцию, которая принимает в качестве аргумента словарь и возвращает два значения: полный список интересов всех студентов и общую длину всех фамилий студентов.
Далее в основном коде вызывается функция, значения присваиваются отдельным переменным и выводятся на экран.
Ваня — очень придирчивый программист, и после просмотра кода он понял, что этого кандидата на работу не возьмёт, хотя он выдаёт верный результат.
Перепишите этот код так, чтобы он был максимально pythonic и Ваня мало к чему мог придраться (только если очень захочется). Убедитесь, что программа верно работает Проверки на существование записей в словаре не обязательны, но приветствуются.
Задача 2. Универсальная программа 2
Спустя некоторое время заказчик попросил вас немного изменить скрипт для криптографии: теперь индексы элементов должны быть простыми числами.
Напишите функцию, которая возвращает список элементов итерируемого объекта (кортежа, строки, списка, словаря), у которых индекс — это простое число. Для проверки на простое число напишите отдельную функцию is_prime. Основной код оставьте пустым (используйте его только для тестирования).
Дополнительно: сделайте так, чтобы основная функция состояла только из оператора return и так же возвращала список.
Задача 3. Функция
Напишите функцию, которая на вход принимает кортеж и какой-то случайный элемент (его можно вводить с клавиатуры). Функция должна возвращать новый кортеж, начинающийся с первого появления элемента в нём и заканчивающийся вторым его появлением включительно.
Если элемента нет вовсе — вернуть пустой кортеж.
Если элемент встречается только один раз — вернуть кортеж, который начинается с этого элемента и идёт до конца исходного.
Задача 4. Игроки
У вас есть словарь игроков, которые участвовали в трёх видах спорта. В словаре хранятся пары «ФИ — очки»:
players = { ("Ivan", "Volkin"): (10, 5, 13), ("Bob", "Robbin"): (7, 5, 14), ("Rob", "Bobbin"): (12, 8, 2) }
Один программист попросил нас для его базы прислать другой вариант хранения этой информации.
Напишите программу, которая объединяет ключ словаря со значением в один кортеж, и выведите результат на экран. Постарайтесь использовать как можно более эффективное решение.
Задача 5. Одна семья
В одной базе данных хранится информация о членах нескольких разных семей. Хранение реализовано с помощью словаря с парами «ФИ — возраст».
Инициализируйте словарь членов семей (ФИ и возраст используйте любые) и напишите программу, которая запрашивает у пользователя фамилию и выводит на экран возраст всех членов одной семьи. Учтите, что, например, у двух людей разного пола фамилии отличаются окончанием. Поиск не должен быть регистрозависимым.
Задача 6. По парам
Напишите программу, которая инициализирует список из 10 случайных целых чисел, а затем делит эти числа на пары кортежей внутри списка. Выведите результат на экран.
Задача 7. Функция сортировки
Напишите функцию, которая сортирует по возрастанию кортеж, состоящий из целых чисел, и возвращает его отсортированным. Если хотя бы один элемент не является целым числом, то функция возвращает исходный кортеж.
Задача 8. Контакты 3
Мы уже помогали Степану с реализацией телефонной книги на телефоне, однако внезапно оказалось, что книге не хватает ещё одной полезной функции: поиска.
Напишите программу, которая бесконечно запрашивает у пользователя действие, которое он хочет совершить: добавить контакт или найти человека в списке контактов по фамилии.
Действие «добавить контакт»: программа запрашивает имя и фамилию контакта, затем номер телефона, добавляет их в словарь и выводит на экран текущий словарь контактов. Если этот человек уже есть в словаре, то выводится соответствующее сообщение.
Действие «поиск человека по фамилии»: программа запрашивает фамилию и выводит все контакты с такой фамилией и их номера телефонов. Поиск не должен зависеть от регистра символов.
Задача 9. Протокол соревнований
Вы продолжаете развиваться в геймдеве, и в этот раз вам пришло действительно внушительное техническое задание с описанием правил игр, входными и выходными данными. Вот как оно выглядит:
Здравствуйте! Мы собираемся устраивать соревнования по [данные засекречены] и хотим, чтобы вы написали эффективную программу, которая составляла бы нам протокол и определяла победителя и призёров. О логике работы программы ниже.
Правила соревнований
- Участники имеют право играть несколько раз. Количество попыток одного участника не ограничивается.
- Окончательный результат участника определяется по одной игре, лучшей для этого участника.
- Более высокое место в соревнованиях занимает участник, показавший лучший результат.
- При равенстве результатов более высокое место занимает участник, раньше показавший лучший результат.
Как проходят соревнования
В ходе соревнований заполняется протокол, каждая строка которого описывает одну игру и содержит результат участника и его игровое имя. Протокол формируется в реальном времени по ходу проведения чемпионата, поэтому строки в нём расположены в порядке проведения игр: чем раньше встречается строка в протоколе, тем раньше закончилась соответствующая этой строке игра.
Напишите программу, которая по данным протокола определяет победителя и призёров. Гарантируется, что в чемпионате участвует не менее трёх игроков.
Описание входных данных
Первая строка содержит число N — это общее количество строк протокола. Каждая из следующих N строк содержит записанные через пробел результаты участника (целое неотрицательное число) и игровое имя (имя не может содержать пробелов). Строки исходных данных соответствуют строкам протокола и расположены в том же порядке, что и в протоколе.
Гарантируется, что в соревнованиях не менее трёх участников.
Описание выходных данных
Программа должна вывести имена и результаты трёх лучших игроков по форме, приведённой ниже в примере.
Задача 10. Своя функция zip
В самом конце собеседования вас неожиданно спросили: «Расскажите, что делает функция zip?». Чтобы произвести впечатление, вы решили не только рассказать про неё, но и написать её аналог.
Даны строка и кортеж из чисел. Напишите программу, которая создаёт генератор из пар кортежей «символ — число». Затем выведите на экран сам генератор и кортежи.