1zadanie/1zadanie.py
Maргарита Шавлович c80e837d44 1 задание
2026-04-12 21:05:22 +03:00

235 lines
6.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Практическая работа
# Тема: Обработка данных интернет-магазина
def load_products_from_file(filepath):
products = []
try:
file = open(filepath, "r", encoding="utf-8")
for line in file:
line = line.strip()
if line == "":
continue
parts = line.split(";")
if len(parts) != 6:
continue
try:
product = {
"id": int(parts[0]),
"name": parts[1],
"category": parts[2],
"price": float(parts[3]),
"quantity": int(parts[4]),
"description": parts[5]
}
products.append(product)
except:
continue
file.close()
except FileNotFoundError:
print("Файл не найден")
except:
print("Ошибка при чтении файла")
return products
def validate_product(product):
if "id" not in product:
return False
if "name" not in product:
return False
if "category" not in product:
return False
if "price" not in product:
return False
if "quantity" not in product:
return False
if "description" not in product:
return False
if product["name"].strip() == "":
return False
if product["category"].strip() == "":
return False
if product["price"] < 0:
return False
if product["quantity"] < 0:
return False
return True
def filter_products_by_category(products, category):
result = []
for product in products:
if product["category"].lower() == category.lower():
result.append(product)
return result
def search_products_by_keyword(products, keyword):
result = []
for product in products:
text = product["name"] + " " + product["description"]
if keyword.lower() in text.lower():
result.append(product)
return result
def sort_products_by_price(products, descending=False):
return sorted(products, key=lambda x: x["price"], reverse=descending)
def calculate_discounted_price(price, discount_percent):
new_price = price - price * discount_percent / 100
return round(new_price, 2)
def build_cart(products, product_ids):
cart = []
for product_id in product_ids:
for product in products:
if product["id"] == product_id:
cart.append(product)
break
return cart
def calculate_cart_total(cart, discounts=None):
total = 0
for product in cart:
current_price = product["price"]
if discounts is not None:
if product["id"] in discounts:
current_price = calculate_discounted_price(current_price, discounts[product["id"]])
elif product["category"] in discounts:
current_price = calculate_discounted_price(current_price, discounts[product["category"]])
total += current_price
return round(total, 2)
def group_products_by_category(products):
groups = {}
for product in products:
category = product["category"]
if category not in groups:
groups[category] = []
groups[category].append(product)
return groups
def generate_order_report(cart, total_cost):
report = "Отчет по заказу\n"
report += "-------------------------\n"
number = 1
for product in cart:
report += str(number) + ". " + product["name"] + " - " + str(product["price"]) + " руб.\n"
number += 1
report += "-------------------------\n"
report += "Количество товаров: " + str(len(cart)) + "\n"
report += "Итоговая стоимость: " + str(total_cost) + " руб.\n"
return report
def main():
products = load_products_from_file("data.txt")
print("Загруженные товары:")
for product in products:
print(product)
valid_products = []
invalid_products = []
for product in products:
if validate_product(product):
valid_products.append(product)
else:
invalid_products.append(product)
print()
print("Корректных товаров:", len(valid_products))
print("Некорректных товаров:", len(invalid_products))
filtered_products = filter_products_by_category(valid_products, "Электроника")
print()
print("Товары категории Электроника:")
for product in filtered_products:
print(product["name"], "-", product["price"], "руб.")
found_products = search_products_by_keyword(valid_products, "игровой")
print()
print("Поиск по слову 'игровой':")
for product in found_products:
print(product["name"], "-", product["description"])
sorted_products = sort_products_by_price(found_products)
print()
print("После сортировки по цене:")
for product in sorted_products:
print(product["name"], "-", product["price"], "руб.")
if len(valid_products) > 0:
old_price = valid_products[0]["price"]
new_price = calculate_discounted_price(old_price, 10)
print()
print("Пример расчета скидки:")
print("Старая цена:", old_price)
print("Новая цена:", new_price)
cart = build_cart(valid_products, [1, 3, 5])
print()
print("Корзина:")
for product in cart:
print(product["name"], "-", product["price"], "руб.")
discounts = {
1: 10,
"Электроника": 5
}
total_cost = calculate_cart_total(cart, discounts)
print()
print("Итоговая стоимость корзины:", total_cost, "руб.")
groups = group_products_by_category(valid_products)
print()
print("Группировка товаров по категориям:")
for category in groups:
print(category, "-", len(groups[category]), "товаров")
report = generate_order_report(cart, total_cost)
print()
print(report)
if __name__ == "__main__":
main()