📋 Формулировка задания
Исходное задание из LMS:
1. План по дням недели. Напишите программу, которая помогает планировать дела. Программа должна бесконечно выводить план на следующий день недели, пока пользователь нажимает Enter.
# Расписание дел на неделю
WEEKLY_SCHEDULE = {
"Monday": ["Gym", "Work", "Read book"],
"Tuesday": ["Meeting", "Work", "Study Python"],
"Wednesday": ["Shopping", "Work", "Watch movie"],
"Thursday": ["Work", "Call parents", "Play guitar"],
"Friday": ["Work", "Dinner with friends"],
"Saturday": ["Hiking", "Rest"],
"Sunday": ["Family time", "Rest"]
}
Пример ввода/вывода:
Нажмите 'Enter' для получения плана:
Monday: Gym, Work, Read book
Нажмите 'Enter' для получения плана:
Tuesday: Meeting, Work, Study Python
...
Нажмите 'Enter' для получения плана: q
2. Объединение списков продуктов. Напишите функцию, которая принимает несколько списков с названиями продуктов и возвращает генератор, содержащий все продукты в нижнем регистре. Выведите содержимое генератора.
fruits = ["Apple", "Banana", "Orange"]
vegetables = ["Carrot", "Tomato", "Cucumber"]
dairy = ["Milk", "Cheese", "Yogurt"]
Пример вывода: apple banana orange carrot tomato cucumber milk cheese yogurt.
3. Комбинации одежды. Напишите функцию, которая принимает списки типов одежды, цветов и размеров, а затем генерирует все возможные комбинации в формате "Clothe - Color - Size".
clothes = ["T-shirt", "Jeans", "Jacket"]
colors = ["Red", "Blue", "Black"]
sizes = ["S", "M", "L"]
🔧 Шаг 0. Подготовка окружения
Для этого урока не требуется устанавливать сторонние пакеты — достаточно стандартной библиотеки Python.
Создайте рабочую папку
mkdir -p python-fundamentals-practice/lesson-54
cd python-fundamentals-practice/lesson-54
Создайте виртуальное окружение (опционально, но рекомендуется)
# Windows
python -m venv venv
venv\Scripts\activate
# Mac / Linux
python3 -m venv venv
source venv/bin/activate
Создайте файлы для каждой задачи
type nul > task_1_planner.py
type nul > task_2_products.py
type nul > task_3_outfits.py
✅ Полное решение
Ниже приведены эталонные решения. Попробуйте написать код самостоятельно перед просмотром.
Задача 1. Планировщик дней недели
from itertools import cycle
WEEKLY_SCHEDULE = {
"Monday": ["Gym", "Work", "Read book"],
"Tuesday": ["Meeting", "Work", "Study Python"],
"Wednesday": ["Shopping", "Work", "Watch movie"],
"Thursday": ["Work", "Call parents", "Play guitar"],
"Friday": ["Work", "Dinner with friends"],
"Saturday": ["Hiking", "Rest"],
"Sunday": ["Family time", "Rest"]
}
def run_planner() -> None:
"""Бесконечно выводит план на следующий день недели."""
days = cycle(WEEKLY_SCHEDULE.items())
while True:
user_input = input("Нажмите 'Enter' для получения плана: ")
if user_input.lower() == "q":
break
day, tasks = next(days)
print(f"{day}: {', '.join(tasks)}")
if __name__ == "__main__":
run_planner()
Задача 2. Объединение списков продуктов
import itertools
from collections.abc import Iterator
def merge_lower(*lists: list[str]) -> Iterator[str]:
"""Объединяет любое количество списков, возвращая названия в нижнем регистре."""
return (item.lower() for item in itertools.chain.from_iterable(lists))
def main() -> None:
fruits = ["Apple", "Banana", "Orange"]
vegetables = ["Carrot", "Tomato", "Cucumber"]
dairy = ["Milk", "Cheese", "Yogurt"]
for product in merge_lower(fruits, vegetables, dairy):
print(product)
if __name__ == "__main__":
main()
Задача 3. Комбинации одежды
import itertools
from collections.abc import Iterator
def generate_outfits(clothes: list[str], colors: list[str], sizes: list[str]) -> Iterator[str]:
"""Генерирует все комбинации одежды в формате 'Clothe - Color - Size'."""
return (
f"{cloth} - {color} - {size}"
for cloth, color, size in itertools.product(clothes, colors, sizes)
)
def main() -> None:
clothes = ["T-shirt", "Jeans", "Jacket"]
colors = ["Red", "Blue", "Black"]
sizes = ["S", "M", "L"]
for outfit in generate_outfits(clothes, colors, sizes):
print(outfit)
if __name__ == "__main__":
main()
🧪 Как проверить решение
- Активируйте venv (если создавали).
- Запустите каждый файл:
python task_1_planner.py,python task_2_products.py,python task_3_outfits.py. - Для первой задачи нажмите Enter несколько раз, убедитесь, что дни повторяются по кругу, и введите
qдля выхода. - Убедитесь, что в терминале нет ошибок и вывод соответствует условию.
🐛 Отладка
Если что-то не работает:
- Проверьте, что генератор не исчерпан до вывода.
- Используйте
print(list(generator))только для отладки — в финальном коде это может съесть память. - Читайте traceback: Python укажет строку с ошибкой.
💾 Сохранение работы
git add python-fundamentals-practice/lesson-54/
git commit -m "lesson-54: iterators and generator expressions"
git push