Загрузка данных


Обработка заняла 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`.