1 задание

This commit is contained in:
Maргарита Шавлович 2026-04-12 21:05:22 +03:00
commit c80e837d44
4 changed files with 242 additions and 0 deletions

235
1zadanie.py Normal file
View File

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

1
README.md Normal file
View File

@ -0,0 +1 @@
1 задание по учебной практике

6
data.txt Normal file
View File

@ -0,0 +1,6 @@
1;Ноутбук Lenovo;Электроника;55000;10;Игровой ноутбук с мощной видеокартой
2;Мышь Logitech;Электроника;2500;25;Беспроводная мышь для работы
3;Клавиатура Redragon;Электроника;3200;15;Механическая игровая клавиатура
4;Рюкзак Xiaomi;Аксессуары;2800;12;Городской рюкзак для ноутбука
5;Наушники JBL;Электроника;4700;8;Беспроводные наушники с хорошим звуком
6;Блокнот;Канцтовары;150;40;Тетрадь для записей

0
requirements.txt Normal file
View File