Files
Python_Basic/Module17/README.md
2025-09-22 02:37:58 +03:00

213 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Цели домашнего задания
Уметь:
- описывать 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'`
Напишите программу, которая выводит на экран десять вот таких результатов:
1. Копию строки.
1. Элементы строки в обратном порядке.
1. Каждый второй элемент строки (включая самый первый).
1. Каждый второй элемент строки после первого.
1. Все элементы до второго.
1. Все элементы начиная с конца до предпоследнего.
1. Все элементы в диапазоне индексов от 3 до 4 (не включая 4).
1. Последние три элемента строки.
1. Все элементы в диапазоне индексов от 3 до 4.
1. То же, что и в предыдущем пункте, но в обратном порядке.
Для получения и вывода результатов используйте только команду 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. Список списков
### Что нужно сделать
Дан вот такой (уже многомерный!) список:
```python
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](https://docs.python.org/3.7/reference/expressions.html#operator-precedence) остаются в приоритете. Необходимо вводить and, or.
- Руководство по стилю Python [PEP8](https://www.python.org/dev/peps/pep-0008/) на английском языке.
- Руководство по стилю Python [PEP8](https://pep8.ru/doc/pep8/) на русском языке.
- [Список встроенных функций](https://docs.python.org/3.7/library/functions.html).
## Как отправить задание на проверку
Чтобы выполнить домашнее задание, обновите репозиторий python_basic на своём компьютере при помощи IDE PyCharm. Задачи находятся в папке Module17.
Сдайте домашние работы этого модуля через систему контроля версий Git сервиса Skillbox GitLab. В уроке с домашним заданием напишите «Сделано» и прикрепите ссылку на репозиторий. Ссылки на реплит оставлять не нужно.