🏠 Домашнее задание

⚡ Суть задания

Домашнее задание закрепляет работу со списками, циклами и изменяемостью. Нужно решить две задачи: торговый автомат (жадный алгоритм размена монетами 50, 10, 5, 2, 1) и возведение нечётных чисел списка в квадрат.

Результат: 2 рабочих файла .py, которые корректно обрабатывают данные.

📋 Формулировка задания

Исходное задание из LMS:

  1. Торговый автомат. Напишите программу, которая моделирует работу торгового автомата. Автомат принимает только монеты номиналом 1, 2, 5, 10 и 50. Программа должна запрашивать у пользователя общую стоимость покупки, а затем отображать, сколько монет каждого типа нужно потратить, чтобы использовать минимальное количество монет для оплаты товара.
    Введите стоимость товара: 127
    Внесите монеты номиналом 50: 2
    Внесите монеты номиналом 10: 2
    Внесите монеты номиналом 5: 1
    Внесите монеты номиналом 2: 1
  2. Квадрат нечётных чисел. Напишите программу, которая изменяет изначальный список и возводит в квадрат только нечётные числа.
    numbers = [4, 9, 1, 7, 2, 5, 0, 3, 7, 1, 3]
    # Изначальный список: [4, 9, 1, 7, 2, 5, 0, 3, 7, 1, 3]
    # Изменённый список:  [4, 81, 1, 49, 2, 25, 0, 9, 49, 1, 9]

🔧 Шаг 0. Подготовка окружения

Перед началом работы над любым заданием курса нужно настроить окружение. Эти шаги одинаковы для всех уроков.

📁 Структура репозитория: мы используем один репозиторий для всех практических работ курса. Это удобнее, чем 46 отдельных репозиториев: общий .gitignore, единая история, легко переключаться между уроками.
1

Создайте (или откройте) рабочую папку

В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку python-fundamentals-practice. Это будет корень вашего учебного репозитория.

# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
2

Инициализируйте Git-репозиторий (один раз)

Если папка ещё не является git-репозиторием:

git init

# Создайте базовые файлы
echo "# Python Fundamentals — Практические работы" > README.md
echo "venv/" > .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore
echo ".env" >> .gitignore

git add README.md .gitignore
git commit -m "init: базовая структура репозитория"
3

Создайте папку для текущего урока

# Структура: lesson-XX/
mkdir -p lesson-18
cd lesson-18
4

Создайте виртуальное окружение (venv)

# Windows (PowerShell / CMD)
python -m venv venv
venv\Scripts\activate

# Mac / Linux
python3 -m venv venv
source venv/bin/activate

После активации в начале строки терминала появится (venv). Все дальнейшие команды выполняйте внутри venv.

5

Создайте ветку для задания

# Вернитесь в корень репозитория
cd ..

# Создайте и переключитесь на ветку
git checkout -b lesson/18-lists-intro

# Отправьте ветку на удалённый репозиторий (если настроен)
git push -u origin lesson/18-lists-intro

Именование веток: lesson/XX-краткое-название. Это позволяет легко находить нужный урок.

🛠️ Шаги выполнения заданий

Теперь, когда окружение готово, приступайте к решению.

1

Создайте файлы для заданий

В папке lesson-18 создайте файлы:

task_01_vending_machine.py
task_02_square_odd.py
2

Решите задание 1: торговый автомат

Жадный алгоритм: берём монеты от большего номинала к меньшему.

📄 task_01_vending_machine.py
cost = int(input("Введите стоимость товара: "))
coins = [50, 10, 5, 2, 1]

for coin in coins:
    count = cost // coin
    cost = cost % coin
    if count:
        print(f"Внесите монеты номиналом {coin}: {count}")
3

Решите задание 2: квадрат нечётных чисел

Изменяем исходный список: нечётные элементы возводим в квадрат.

📄 task_02_square_odd.py
numbers = [4, 9, 1, 7, 2, 5, 0, 3, 7, 1, 3]

for i in range(len(numbers)):
    if numbers[i] % 2 != 0:
        numbers[i] = numbers[i] ** 2

print("Изменённый список:", numbers)
4

Проверьте каждый файл в VS Code

Запустите программы и проверьте вывод:

python task_01_vending_machine.py
python task_02_square_odd.py

Проверьте граничные случаи: 0, 1, суммы, не требующие всех номиналов, пустой ввод.

🧪 Как проверить решение

  1. Активируйте venv: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  2. Запустите каждый файл: python task_XX_....py.
  3. Проверьте вывод в терминале — не должно быть ошибок.
  4. Проверьте граничные случаи: стоимость 0, минимальные и максимальные значения, списки с разными числами.

🐛 Отладка в VS Code

Если что-то не работает:

  1. Поставьте точку останова (breakpoint) кликом слева от номера строки.
  2. Нажмите F5 или выберите «Run → Start Debugging».
  3. Используйте панель Debug (переменные, стек вызовов, консоль).
  4. Проверьте Terminal на наличие traceback — Python показывает номер строки с ошибкой.
  5. Если список меняется не так, проверьте, что вы меняете элемент по индексу, а не переменную цикла.

💾 Сохранение работы

# Добавьте все файлы урока
git add lesson-18/

# Сделайте коммит с осмысленным сообщением
git commit -m "lesson-18: lists intro - vending machine and square odd"

# Отправьте на GitHub / GitLab
git push

💡 Советы и типичные ошибки

  • Убедитесь, что venv активирован перед запуском.
  • Не коммитьте папку venv/ — она указана в .gitignore.
  • В торговом автомате используйте целочисленное деление // и остаток %.
  • Для изменения элементов списка используйте индексы, а не переменную цикла.
  • Помните: my_list * n с изменяемыми элементами создаёт копии ссылок, а не независимые элементы.