# Практическая работа # Тема: Обработка данных интернет-магазина 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()