✅ Решения практикума

⚡ Кратко

Ключевые приёмы: print(*items, sep="\n"), распаковка кортежей в цикле, f-strings для таблиц, накопление итогов через переменную total и расчёт среднего.

1. Таблица товаров

products = ["Молоко", "Хлеб", "Сахар-песок", "Подсолнечное масло", "Шоколадный батончик", "Мороженое"]
print(*products, sep="\n")

2. Фильтрация по количеству

data = [("апельсин", 5), ("вишня", 12), ("киви", 18), ("ананас", 7), ("яблоко", 20)]
print("Отфильтрованные данные:")
for name, amount in data:
    if amount > 10:
        print(f"Товар : {name:<10}|   Цена : {amount}")

3. Товары со скидкой

products = [("Кофе", 127.99), ("Чай", 52.49), ("Шоколад", 81.99)]
discount = int(input("Введите процент скидки: "))
print(f"{'Название':<15} | {'Цена':>10} | {'Скидка':>10} | {'Итоговая цена':>15}")
print("-" * 60)
for name, price in products:
    final_price = price * (1 - discount / 100)
    print(f"{name:<15} | {price:>10.2f} | {discount:>9}% | {final_price:>15.2f}")

4. Таблица покупок

products = [("Молоко", 3, 10), ("Хлеб", 1, 5), ("Сахар-песок", 2, 15), ("Подсолнечное масло", 5, 3), ("Шоколадный батончик", 4, 20), ("Мороженое", 3, 20)]
name_width = 0
for name, price, quantity in products:
    if len(name) > name_width:
        name_width = len(name)
name_width += 3
line_len = name_width + 29
print(f"| {'Название':<{name_width}} | {'Цена':>7} | {'Количество':>10} |")
print("-" * line_len)
for name, price, quantity in products:
    print(f"| {name:<{name_width}} | {price:>7} | {quantity:>10} |")

5. Письма клиентам

clients = [
    ("Иван", "Иванов", 10, [("Кофе", 100.00), ("Чай", 200.00)]),
    ("Анна", "Смирнова", 15, [("Шоколад", 150.00), ("Печенье", 50.00)]),
    ("Петр", "Сидоров", 20, [("Чайник", 1000.00), ("Кружка", 300.00)])
]
for name, surname, discount, products in clients:
    total = 0
    goods_text = ""
    for product_name, price in products:
        total += price
        goods_text += f"  - {product_name}: {price:.2f}\n"
    final_price = total * (1 - discount / 100)
    print(f"Уважаемый {name} {surname},\n\nСпасибо за покупку в нашем магазине!\n\nВы купили следующие товары:\n{goods_text}\nОбщая сумма покупок: {total:.2f}\nВаша скидка: {discount}%\nСумма с учётом скидки: {final_price:.2f}\n")

6. Отчёт по сотрудникам

employees = [("Иван", "Иванов", "Менеджер", 1600), ("Мария", "Петрова", "Аналитик", 2000), ("Сергей", "Сидоров", "Разработчик", 2400), ("Анна", "Смирнова", "Дизайнер", 1750)]
print(f"{'Имя':<10}{'Фамилия':<15}{'Должность':<20}{'Зарплата':>10}")
print("-" * 55)
total_salary = 0
for name, surname, position, salary in employees:
    total_salary += salary
    print(f"{name:<10}{surname:<15}{position:<20}{salary:>10,.2f}")
average_salary = total_salary / len(employees)
print("-" * 55)
print(f"{'ИТОГО':<45}{total_salary:>10,.2f}")
print(f"{'Средняя зарплата':<45}{average_salary:>10,.2f}")

7. Отчёт по спортивному мероприятию

participants = [("Иван", "Иванов", "Бег на 100м", 1, (0, 9.58)), ("Мария", "Петрова", "Плавание", 2, (1, 2.34)), ("Сергей", "Сидоров", "Велогонка", 3, (25, 15.10)), ("Анна", "Смирнова", "Марафон", 1, (120, 34.56)), ("Дмитрий", "Ковалёв", "Прыжки в длину", 4, (0, 8.25))]
total_seconds = 0
report = f"{'Имя':<10}{'Фамилия':<15}{'Вид спорта':<20}{'Место':<10}{'Время завершения':>15}\n"
report += "-" * 70 + "\n"
for name, surname, sport, place, (minutes, seconds) in participants:
    total_seconds += minutes * 60 + seconds
    if place == 1:
        message = "Поздравляем с победой!"
    elif place == 2:
        message = "Отличный результат!"
    elif place == 3:
        message = "Вы заняли призовое место!"
    else:
        message = "Удачи в следующий раз!"
    print(f"{name} {surname}, спасибо за участие в {sport}! {message}")
    report += f"{name:<10}{surname:<15}{sport:<20}{place:<10}{minutes:>8}:{seconds:05.2f}\n"
average_seconds_total = total_seconds / len(participants)
average_minutes = int(average_seconds_total // 60)
average_seconds = average_seconds_total % 60
report += "-" * 70 + "\n"
report += f"Общее количество участников: {len(participants)}\n"
report += f"Среднее время завершения: {average_minutes} мин {average_seconds:.2f} сек"
print("\nОТЧЁТ ПО МЕРОПРИЯТИЮ:")
print(report)