From 03fec47b6d560dbd075236f82745819a22a9f43b Mon Sep 17 00:00:00 2001 From: matvey_karachev Date: Tue, 5 May 2026 22:50:39 +0300 Subject: [PATCH] izmenil --- data.txt | Bin 94 -> 754 bytes nime1.py | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) diff --git a/data.txt b/data.txt index a0feecf9cc607ffe330d871a2047c281cc0b852e..b67e936646a4b639684b7bdfd2c4002b665eae0b 100644 GIT binary patch literal 754 zcmcJNOH0F05QWd;tOTJbf+%WmUCPZ%6R)jJH(j)gg7^b`6cisVwHyDudgeB@u6!&? z$Yk!x&CGYt!(6beyQ5egD z!@j9_u8!TB#EIaL`)qQX4dve{+v5F+rTAh=Rd*obH{6KAi0-6h@?l9~o!93@rs^Yg zpVux#=!s*3N9jqRC{Zdm&IN^K7tGnKeUG5CYJJ8^vDCTkBv!$E&*kCL_y5e@xDL3> dJ(|Z2&3r3NJXhDW?(>&f|L*VVUt7nFKLNicWH0~# literal 94 wcmezWFPI^fA(m0MB0%AOHXW diff --git a/nime1.py b/nime1.py index e69de29..242348f 100644 --- a/nime1.py +++ b/nime1.py @@ -0,0 +1,140 @@ +import datetime + + +# Превращаем "иванов ПЕТР" в "Иванов П. П." +def format_customer_name(full_name): + fio = full_name.split() + if not fio: return "" + surname = fio[0].capitalize() + # Собираем инициалы через цикл + initials = "" + for name in fio[1:]: + initials += f" {name[0].upper()}." + return f"{surname}{initials}" + + +# Считаем скидочку: электроника - 10%, остальное - 5% +def calculate_discount(total_sum, category): + if category.lower() == "electronics": + rate = 0.10 + else: + rate = 0.05 + return round(total_sum * rate, 2) + + +# Проверяем, не пустой ли склад +def validate_stock(product_id, quantity, warehouse_db): + v_nalichii = warehouse_db.get(product_id, 0) + return v_nalichii >= quantity + + +# Добавляем налог региона +def apply_tax(price, region_code): + taxes = {"77": 1.20, "78": 1.15} # Москва и Питер + tax_rate = taxes.get(region_code, 1.10) # Остальные - 10% + return round(price * tax_rate, 2) + + +# Бьем строку из файла на части +def parse_raw_order(csv_line): + d = csv_line.strip().split(';') + return { + "id": d[0], "product": d[1], "price": float(d[2]), + "qty": int(d[3]), "user_id": d[4], "customer_name": d[5], + "category": d[6], "region": d[7] + } + + +# Просто фильтр по цене +def filter_by_price(orders_list, min_price): + res = [] + for o in orders_list: + if o['price'] >= min_price: + res.append(o) + return res + + +# Собираем все уникальные категории в кучу +def get_unique_categories(products_list): + cats = [] + for p in products_list: + cats.append(p['category']) + return set(cats) + + +# Считаем сколько юзер накупил за все время +def summarize_user_activity(user_id, all_orders): + u_orders = [o for o in all_orders if o['user_id'] == user_id] + total = sum(o['total_spent'] for o in u_orders) + return {"total_orders": len(u_orders), "total_spent": round(total, 2)} + + +# Генерим красивый номер дока +def generate_invoice_id(index, region): + return f"2024-{region}-{index:04d}" + + +# Просто вывод лога с временем +def log_transaction(status, message): + t = datetime.datetime.now().strftime("%H:%M:%S") + return f"[{t}] {status.upper()}: {message}" + + +def main(): + # Типа наша база данных + sklad = {"101": 50, "102": 2, "103": 100, "104": 15} + + orders_list = [] + + # Читаем данные из файла + try: + with open('data.txt', 'r', encoding='utf-8') as f: + lines = f.readlines() + except FileNotFoundError: + print("Ошибка: Файл data.txt не найден!") + return + + print(log_transaction("info", "Начинаем обработку...")) + + for i, line in enumerate(lines, 1): + if not line.strip(): continue # Пропуск пустых строк + + # Парсим строку в словарь + order = parse_raw_order(line) + + # Проверяем склад + if validate_stock(order['id'], order['qty'], sklad): + # Считаем деньги + raw_sum = order['price'] * order['qty'] + discount = calculate_discount(raw_sum, order['category']) + final_sum = apply_tax(raw_sum - discount, order['region']) + + # Дописываем новые данные в словарь + order['invoice'] = generate_invoice_id(i, order['region']) + order['clean_name'] = format_customer_name(order['customer_name']) + order['total_spent'] = final_sum + + orders_list.append(order) + print(log_transaction("ok", f"Заказ {order['invoice']} для {order['clean_name']} готов")) + else: + print(log_transaction("error", f"Товара {order['id']} маловато на складе")) + + # Выводим финальную стату + print("\n" + "=" * 30) + print("ИТОГОВЫЙ ОТЧЕТ ПО ЮЗЕРАМ:") + print("=" * 30) + + unique_users = set(o['user_id'] for o in orders_list) + for u in unique_users: + stats = summarize_user_activity(u, orders_list) + # Находим имя юзера для красоты + name = next(o['clean_name'] for o in orders_list if o['user_id'] == u) + print(f"Клиент: {name:20} | Заказов: {stats['total_orders']} | Итого: {stats['total_spent']} руб.") + + # Список всех категорий + all_cats = get_unique_categories(orders_list) + print("\nРаботали с категориями:", ", ".join(all_cats)) + + +if __name__ == "__main__": + main()