📝 Задания: генераторы, JSON и datetime

⚡ Кратко

  1. Квиз по генераторам, JSON и datetime.
  2. Практика: поиск просроченных задач из JSON.

Квиз

Вопрос 1

Чем генератор отличается от обычной функции?

  1. Генератор использует yield, а не return.
  2. Генератор возвращает сразу все значения.
  3. Генератор запоминает состояние между вызовами.
  4. Генератор создаёт бесконечные последовательности.

Вопрос 2

Что выведет следующий код?

def squares(n):
    for i in range(n):
        yield i ** 2

gen = squares(4)
for num in gen:
    print(num)
  1. 0, 1, 4, 9
  2. 0, 1, 4, 9, StopIteration

Вопрос 3

Какие из следующих утверждений о генераторах верны?

  1. Генератор вычисляет элементы по запросу.
  2. Генератор можно вызвать несколько раз и он всегда начинает сначала.
  3. Генератор можно использовать в for.
  4. Генератор занимает меньше памяти, чем список.

Вопрос 4

Какой код создаст генератор для квадратов чисел от 1 до 5?

  1. def squares():
        yield [x**2 for x in range(1, 6)]
  2. def squares():
        for x in range(1, 6):
            yield x**2
  3. squares = [x**2 for x in range(1, 6)]
  4. squares = (x**2 for x in range(1, 6))

Вопрос 5

Что напечатает следующий код?

def task_cycle():
    yield from ["A", "B", "C"]

gen = task_cycle()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
  1. A, B, C, A
  2. A, B, C, None
  3. A, B, C, StopIteration
  4. Ошибка, так как yield from нельзя использовать со списками.

Вопрос 6

Какой код создаст бесконечный генератор?

  1. def infinite_loop():
        while True:
            yield 1
  2. def infinite_loop():
        yield from range(10)
  3. def infinite_loop():
        for i in range(10):
            yield i
  4. import itertools
    
    def infinite_loop():
        yield from itertools.cycle([1, 2, 3])
  5. def infinite_loop():
        while True:
            yield from range(10)

Вопрос 7

Что произойдёт при выполнении кода?

import json

data = {"x": 1, "y": 2}
json_str = json.dumps(data, indent=4, sort_keys=True)
print(json_str)
  1. Будет ошибка, sort_keys нельзя использовать с indent.
  2. Будет выведен JSON без отступов.
  3. Будет выведен отсортированный и отформатированный JSON.

Вопрос 8

Какой результат даст следующий код?

import json

data = {"имя": "Алиса", "город": "Минск"}
json_str = json.dumps(data)
print(json_str)

Вопрос 9

Сопоставьте Python-тип его соответствию в JSON:

  1. NoneType
  2. bool
  3. tuple
  4. dict
  5. list
  6. str
  1. array
  2. null
  3. object
  4. string
  5. boolean

Вопрос 10

Что выведет следующий код?

from datetime import datetime, timedelta

start = datetime(2025, 1, 30)
delta = timedelta(days=10)
new_date = start + delta
print(new_date.strftime("%d-%m-%Y"))
  1. 08-02-2025
  2. 09-02-2025
  3. 10-02-2025
  4. 11-02-2025

Вопрос 11

Сопоставьте формат с результатом:

  1. "%Y.%m.%d"
  2. "%A.%d.%B"
  3. "%B.%d.%Y"
  4. "%d.%m.%Y"
  1. Friday.28.February
  2. 2025.02.28
  3. 28.02.2025
  4. February.28.2025

Вопрос 12

Что выведет следующий код?

from datetime import datetime

dt = datetime(2025, 2, 28, 14, 30, 15)
print(dt.strftime("%H:%M"))
  1. 2:30
  2. 14:30
  3. 14.30
  4. 02:30

Практическая работа: Поиск просроченных задач

Реализуйте программу, которая должна:

  1. Прочитать задачи из файла tasks_with_deadline.json.
    • Каждая задача содержит название, срок выполнения и статус (done или pending).
  2. Запросить у пользователя дату в формате dd-mm-yyyy или использовать текущую.
  3. Найти все задачи, которые:
    • не выполнены (pending);
    • и срок которых истёк на указанную дату.
  4. Вывести список просроченных задач на экран.

Данные

[
  {"title": "Audit finances", "deadline": "23-12-2025", "status": "done"},
  {"title": "Schedule interviews", "deadline": "10-06-2025", "status": "done"},
  {"title": "Update CRM", "deadline": "08-02-2025", "status": "done"},
  {"title": "Plan event", "deadline": "15-09-2025", "status": "pending"},
  {"title": "Team meeting", "deadline": "15-04-2025", "status": "pending"},
  {"title": "Plan event", "deadline": "23-05-2025", "status": "pending"},
  {"title": "Backup server", "deadline": "19-03-2025", "status": "pending"},
  {"title": "Host webinar", "deadline": "20-02-2025", "status": "done"},
  {"title": "Sign contract", "deadline": "28-07-2025", "status": "pending"}
]

Пример вывода

Введите дату проверки (dd-mm-yyyy) или нажмите Enter для текущей: 03-03-2025
Просроченные задачи:
- Post job ad (17-02-2025)
- Sign contract (08-01-2025)
- Team meeting (06-01-2025)
- Update website (22-02-2025)
- Prepare slides (12-02-2025)
- Review performance (04-01-2025)
- Refactor code (31-01-2025)

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Как лучше использовать summary-урок?

Вопрос 2

Что показывает хороший результат после повторения блока?

Вопрос 3

Какой вопрос стоит задать себе после каждого ответа?

Вопрос 4

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 5

Зачем использовать f-strings в современном Python?

Вопрос 6

Когда полезен ранний возврат из функции?

Вопрос 7

Что делает аннотация типа в Python?

Вопрос 8

Как лучше обрабатывать ожидаемую ошибку преобразования?