Загрузка данных
Обработка заняла 14s
Я бы сделал задания в формате уровней мастерства, чтобы ученики не просто решали упражнения, а постепенно переходили от понимания синтаксиса к самостоятельному проектированию программ.
Для этой группы логично опираться на материал первых трёх уроков: переменные, условия, строки, циклы, списки, кортежи, словари и методы `dict`, а также `Counter` и `defaultdict` из третьего урока.
Вместо «Начальное понимание — Продвинутое понимание — Лучшее понимание» я бы предложил чуть более игровые названия:
* Уровень 1 — Разведчик: научиться уверенно применять конструкции.
* Уровень 2 — Инженер: комбинировать несколько изученных инструментов.
* Уровень 3 — Архитектор: самостоятельно продумывать алгоритм и обрабатывать нестандартные ситуации.
При этом сложность должна расти не просто за счёт большего количества кода, а за счёт самостоятельности: сначала ученик знает, какой инструмент использовать, затем сам выбирает инструменты, а в конце проектирует решение.
### Дополнительные задания по Python 2.0
9 основных заданий + 3 испытания на мастерство. Без готовых решений — чтобы ученики действительно подумали.
### Уровень 1. Разведчик — базовое понимание
Цель: уверенно использовать изученные конструкции без сложных комбинаций.
Задание 1. Анализатор числа
Пользователь вводит целое число. Программа должна определить:
* положительное оно, отрицательное или равно нулю;
* чётное оно или нечётное;
* делится ли оно на 3 без остатка.
Выведи все три результата.
Подсказка: `if`, `else`, `%`, `input()`, `int()`.
Задание 2. Обработчик строки
Пользователь вводит предложение. Программа должна:
* Вывести длину строки.
* Вывести первый и последний символы.
* Вывести строку в обратном порядке.
* Проверить, встречается ли в строке буква `"а"`.
Подсказка: `len()`, индексы, срезы, `in`.
Задание 3. Список покупок
Дан список:
```python
products = ["bread", "milk", "bread", "cheese", "milk"]
```
Нужно:
* Добавить в конец `"eggs"`.
* Удалить первое вхождение `"bread"`.
* Отсортировать список по алфавиту.
* Вывести количество оставшихся товаров.
Подсказка: `append()`, `remove()`, `sort()`, `len()`.
### Уровень 2. Инженер — продвинутое понимание
Цель: объединять несколько изученных инструментов в одном алгоритме.
Задание 4. Анализатор оценок
Дан словарь с оценками учеников:
```python
grades = {
"Alex": 5,
"Maria": 4,
"Ivan": 3,
"Anna": 5,
"Oleg": 2
}
```
Программа должна:
* Вывести имена учеников и их оценки.
* Создать новый словарь только с учениками, получившими оценку не ниже 4.
* Посчитать количество учеников в исходном словаре.
* Добавить ученика `"Dima"` с оценкой 4.
Подсказка: `items()`, `if`, словарный comprehension, `update()`.
Задание 5. Частотный анализатор
Пользователь вводит строку. Программа должна подсчитать, сколько раз встречается каждый символ, и вывести результат.
Пример входных данных:
```text
banana
```
Пример результата по смыслу:
```text
b: 1
a: 3
n: 2
```
Дополнительное условие: сначала решить задачу с помощью обычного словаря, а затем с помощью `Counter`.
Подсказка: цикл `for`, словарь, `Counter`.
Задание 6. Фильтр каталога
Дан словарь товаров и их цен:
```python
prices = {
"keyboard": 2500,
"mouse": 1200,
"monitor": 18000,
"headphones": 3500,
"webcam": 2200
}
```
Пользователь вводит максимальную цену. Создай новый словарь, содержащий только товары, цена которых не превышает введённое значение.
Затем выведи самый дешёвый товар из полученного словаря.
Подсказка: `items()`, условие, `min()` или сортировка. Подумай отдельно, что делать, если подходящих товаров нет.
### Уровень 3. Архитектор — глубокое понимание
Цель: самостоятельно спроектировать решение и объединить несколько структур данных.
Задание 7. Статистика сообщений
Пользователь вводит несколько сообщений — каждое сообщение с новой строки. Ввод заканчивается словом `СТОП`.
Программа должна:
* Сохранить все сообщения в список.
* Посчитать общее количество сообщений.
* Определить самое длинное сообщение.
* Подсчитать частоту каждого слова во всех сообщениях.
* Вывести три наиболее часто встречающихся слова.
Учитывай, что `Python` и `python` должны считаться одним словом.
Подсказка: `while`, `append()`, `split()`, `lower()`, `Counter`, `most_common()`.
Задание 8. Мини-библиотека
Создай каталог книг в виде словаря, где ключ — название книги, а значение — год издания.
Программа должна предоставлять пользователю меню:
* добавить книгу;
* найти книгу по названию;
* вывести все книги, изданные после заданного года;
* вывести каталог по алфавиту;
* удалить книгу;
* завершить программу.
После каждого действия меню должно появляться снова, пока пользователь не выберет завершение.
Подсказка: `while`, `if/elif/else`, `dict`, `update()`, `pop()`, `sorted()`.
Задание 9. Анализатор результатов турнира
Есть список результатов:
```python
results = [
("Alex", 15),
("Maria", 22),
("Ivan", 18),
("Alex", 20),
("Maria", 17),
("Ivan", 25),
("Oleg", 19)
]
```
Каждая пара — имя участника и количество набранных очков в одном раунде.
Необходимо:
* Подсчитать суммарные очки каждого участника.
* Сформировать словарь `имя → сумма очков`.
* Отсортировать участников по сумме очков от большего к меньшему.
* Вывести победителя и его результат.
* Вывести всех участников, набравших больше 35 очков.
Подсказка: список кортежей, `for`, словарь, `sorted()`, аргумент `key`, `reverse=True`.
### Бонусные испытания
Их можно выдавать тем, кто закончил основной уровень раньше остальных.
Босс № 1. Умный склад
Есть список поступлений товаров. Нужно посчитать общее количество каждого товара, найти самый популярный товар и сформировать словарь остатков. Реализуй подсчёт самостоятельно, а затем сравни его с решением через `defaultdict(int)` или `Counter`.
Босс № 2. Детектор повторов
Пользователь вводит строку. Найди все символы, которые встречаются больше одного раза, и выведи их количество. Пробелы не учитывать. Не используй `Counter` — реализуй подсчёт самостоятельно.
Босс № 3. Турнир алгоритмов
Реализуй сортировку списка чисел тремя способами: пузырьком, выбором и вставками. Проверь, что каждый алгоритм выдаёт одинаковый результат на одном исходном списке. Встроенные `sort()` и `sorted()` разрешены только для проверки.
### Как организовать это на занятии
Я бы не давал всем сразу девять заданий. Лучше сделать прогрессию с понятными правилами:
* Разведчик: нужно решить минимум 2 из 3 заданий.
* Инженер: перейти после двух решённых заданий первого уровня и решить минимум 2 из 3 второго.
* Архитектор: самостоятельно выбрать и реализовать хотя бы одно задание третьего уровня.
* Боссы: необязательные задачи для тех, кто хочет проверить себя сверх программы.
При проверке оценивай не только работающий код, но и способность объяснить, почему выбран именно этот способ.
Методический нюанс: вложенные циклы и многомерные списки заявлены в названии Lesson 3, но в присланном ноутбуке их полноценного разбора нет. Поэтому я намеренно не включал их в обязательные задания. Если хочешь проверить именно эту тему, можно добавить отдельный следующий блок с матрицами и вложенными `for`.