15 KiB
Цели домашнего задания
Уметь:
- описывать list comprehensions и преимущества его использования;
- использовать list comprehensions (с условной логикой и без неё) для генерации списков;
- использовать срезы списков для создания копии, получения части списка и изменения объектов внутри списка;
- работать с индексами и срезами строк для решения задач.
Что входит в задание
- Задача 1. Гласные буквы.
- Задача 2. Генерация.
- Задача 3. Случайные соревнования.
- Задача 4. Тренируемся со срезами.
- Задача 5. Разворот.
- Задача 6. Двумерный список.
- Задача 7. Список списков.
- Задача 8. Шифр Цезаря.
Во всех задачах для генерации списков используйте list comprehensions.
Задача 1. Гласные буквы
Что нужно сделать
Команде лингвистов понравилось качество ваших программ, и они решили заказать у вас функцию для анализатора текста, которая создавала бы список гласных букв текста, а заодно считала бы их количество.
Напишите программу, которая запрашивает у пользователя текст и генерирует список из гласных букв этого текста (сама строка вводится на русском языке). Выведите в консоль сам список и его длину.
Пример:
Введите текст: Нужно отнести кольцо в Мордор!
Список гласных букв: ['у', 'о', 'о', 'е', 'и', 'о', 'о', 'о', 'о']
Длина списка: 9
Что оценивается
- Результат вычислений корректен.
- Input содержит корректные приглашения для ввода.
- Формат вывода соответствует примеру.
- Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
Задача 2. Генерация
Что нужно сделать
Пользователь вводит целое число N. Напишите программу, которая генерирует список из N чисел, на чётных местах в нём стоят единицы, а на нечётных — числа, равные остатку от деления своего номера на 5.
Пример:
Введите длину списка: 10
Результат: [1, 1, 1, 3, 1, 0, 1, 2, 1, 4]
Что оценивается
- Результат вычислений корректен.
- Input содержит корректные приглашения для ввода.
- Формат вывода соответствует указанному в задаче.
- Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
Задача 3. Случайные соревнования
Что нужно сделать
Мы хотим протестировать работу электронной таблицы для участников некоторых соревнований. Есть два списка (то есть две команды) по 20 участников в каждом. В этих списках хранятся очки каждого участника (это вещественные числа с двумя знаками после точки, например 4.03). Участник одной команды соревнуется с участником другой команды под таким же номером. То есть первый соревнуется с первым, второй — со вторым и так далее.
Напишите программу, которая генерирует два списка участников (по 20 элементов) из случайных вещественных чисел (от 5 до 10). Для этого найдите подходящую функцию из модуля random. Затем сгенерируйте третий список, в котором окажутся только победители из каждой пары.
Пример:
Первая команда: [7.86, 6.76, 9.97, 9.08, 5.45, 6.9, 8.65, 5.17, 8.17, 5.06, 7.56, 7.1, 7.18, 8.25, 5.53, 7.95, 8.91, 7.11, 8.29, 9.52]
Вторая команда: [7.13, 5.7, 8.89, 5.36, 5.62, 9.46, 5.82, 8.67, 8.41, 7.0, 5.31, 7.8, 9.93, 7.76, 7.4, 8.26, 7.94, 5.71, 7.89, 7.77]
Победители тура: [7.86, 6.76, 9.97, 9.08, 5.62, 9.46, 8.65, 8.67, 8.41, 7.0, 7.56, 7.8, 9.93, 8.25, 7.4, 8.26, 8.91, 7.11, 8.29, 9.52]
Что оценивается
- Результат вычислений корректен.
- Формат вывода соответствует примеру.
- Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
Задача 4. Тренируемся со срезами
Что нужно сделать
Дана строка, в которой хранятся первые семь букв английского алфавита.
alphabet = 'abcdefg'
Напишите программу, которая выводит на экран десять вот таких результатов:
- Копию строки.
- Элементы строки в обратном порядке.
- Каждый второй элемент строки (включая самый первый).
- Каждый второй элемент строки после первого.
- Все элементы до второго.
- Все элементы начиная с конца до предпоследнего.
- Все элементы в диапазоне индексов от 3 до 4 (не включая 4).
- Последние три элемента строки.
- Все элементы в диапазоне индексов от 3 до 4.
- То же, что и в предыдущем пункте, но в обратном порядке.
Для получения и вывода результатов используйте только команду print и срезы.
Результаты работы программы:
1: abcdefg
2: gfedcba
3: aceg
4: bdf
5: a
6: g
7: d
8: efg
9: de
10: ed
Что оценивается
- Результат вычислений корректен.
- Формат вывода соответствует примеру.
- Для получения результата используются только print и срезы переменной alphabet.
Задача 5. Разворот
Что нужно сделать
На вход в программу подаётся строка, в которой буква h встречается как минимум два раза. Реализуйте код, который разворачивает последовательность символов, заключённую между первым и последним появлением буквы h, в противоположном порядке.
Пример 1:
Введите строку: hqwehrty
Развёрнутая последовательность между первым и последним h: ewq.
Пример 2:
Введите строку: hh
Развёрнутая последовательность между первым и последним h:
Пример 3:
Введите строку: hhqwerh
Развёрнутая последовательность между первым и последним h: rewqh.
Что оценивается
- Результат вычислений корректен.
- input содержит корректные приглашения для ввода.
- Формат вывода соответствует примеру.
- Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
Задача 6. Двумерный список
Что нужно сделать
Как мы говорили ранее, в программировании часто приходится писать код исходя из результата, который требует заказчик. В этот раз заказчику нужно получить вот такой двумерный список:
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
Напишите программу, которая генерирует такой список и выводит его на экран. Используйте только list comprehensions.
Что оценивается
- Результат вычислений корректен.
- Формат вывода соответствует примеру: без текста, просто двумерный список с числами.
- Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
Задача 7. Список списков
Что нужно сделать
Дан вот такой (уже многомерный!) список:
nice_list = [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]
Напишите код, который «раскрывает» все вложенные списки, то есть оставляет только внешний список. Для решения используйте только list comprehensions.
Ответ: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
Что оценивается
- Результат вычислений корректен.
- Формат вывода соответствует ответу.
- Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
Задача 8. Шифр Цезаря
Что нужно сделать
Юлий Цезарь использовал свой способ шифрования текста. Каждая буква заменялась на следующую по алфавиту через K позиций по кругу. Если взять русский алфавит и K = 3, то в слове, которое мы хотим зашифровать, буква А станет буквой Г, Б станет Д и так далее.
Пользователь вводит сообщение, а также значение сдвига. Напишите программу, которая зашифрует это сообщение при помощи шифра Цезаря.
Пример:
Введите сообщение: это питон.
Введите сдвиг: 3
Зашифрованное сообщение: ахс тлхср.
Что оценивается
- Результат вычислений корректен.
- input содержит корректные приглашения для ввода.
- Формат вывода соответствует примеру.
- Алгоритм шифрования вынесен в отдельную функцию.
- Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
Что оценивается в домашнем задании
- Практическая работа сдана через GitLab.
- Структура папок и файлов репозитория соответствует репозиторию python_basic.
- Все задачи выполнены в соответствующих папках и файлах
main.py. - Описания коммитов осмысленны и понятны:
111,done,«я сделалъ»— неверно;added m15 homework,14.3 fix: variables naming— верно. - Использованы именованные индексы, не просто
i(подробнее в видео 7.2). - Использованы правильные числа, без дополнительных действий со стороны пользователя, без
+1(подробнее об этом в видео 7.4). - Правильно оформлен
input, без пустого приветствия для ввода (подробнее об этом в видео 2.3). - Переменные и функции имеют значащие имена, не только
a,b,c,d(подробнее об этом в видео 2.3). - Есть пробелы после запятых и при бинарных операциях.
- Нет пробелов после имён функций и перед скобками:
print (),input ()— неверно;print()— верно. - Правильно оформлены блоки
if-elif-else, циклы и функции; отступы одинаковы во всех блоках одного уровня. - Во всех задачах для генерации списков использованы
list comprehensions.
Советы и рекомендации
- Арифметические операции PEP8 остаются в приоритете. Необходимо вводить and, or.
- Руководство по стилю Python PEP8 на английском языке.
- Руководство по стилю Python PEP8 на русском языке.
- Список встроенных функций.
Как отправить задание на проверку
Чтобы выполнить домашнее задание, обновите репозиторий python_basic на своём компьютере при помощи IDE PyCharm. Задачи находятся в папке Module17.
Сдайте домашние работы этого модуля через систему контроля версий Git сервиса Skillbox GitLab. В уроке с домашним заданием напишите «Сделано» и прикрепите ссылку на репозиторий. Ссылки на реплит оставлять не нужно.