/
Nick_Wern
/
SUSU
Обзор
Документация
Войти
/
Nick_Wern
/
SUSU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Python/Lesson11/Lesson11_51.py
104 строки
3 KB
Nick_Wern
Добавлены работы по дисциплине Программирование на Python
03 май 2026, 19:26
03 май 2026, 19:26
913d1bd
Код
Авторство
О чём код?
import json import csv from typing import List, Dict, Any def load_orders(path: str) -> List[Dict[str, Any]]: try: with open(path, 'r', encoding='utf-8') as f: return json.load(f) except (json.JSONDecodeError, FileNotFoundError): return [] def save_orders(orders: List[Dict[str, Any]], path: str) -> None: with open(path, 'w', encoding='utf-8') as f: json.dump(orders, f, indent=2, ensure_ascii=False) def clear_orders(path: str) -> None: try: with open(path, 'w', encoding='utf-8') as f: f.write("") except: None def add_order(order: dict, path: str) -> None: try: required_fields = ["id", "product", "quantity", "price"] for field in required_fields: if field not in order: raise ValueError(f"Отсутствует обязательное поле: {field}") if not isinstance(order["id"], int): raise TypeError("Поле 'id' должно быть целым числом") if not isinstance(order["product"], str): raise TypeError("Поле 'product' должно быть строкой") if not isinstance(order["quantity"], int): raise TypeError("Поле 'quantity' должно быть целым числом") if not isinstance(order["price"], (int, float)): raise TypeError("Поле 'price' должно быть числом") if order["quantity"] <= 0: raise ValueError("Количество должно быть положительным числом") if order["price"] <= 0: raise ValueError("Цена должна быть положительным числом") orders = load_orders(path) order_ids = [ o["id"] for o in orders ] if order["id"] in order_ids: raise ValueError(f"Заказ с ID {order['id']} уже существует") orders.append(order) save_orders(orders, path) print(f"Заказ с ID {order['id']} успешно добавлен") except (ValueError, TypeError) as e: print(f"Ошибка: {e}") def export_orders_to_csv(json_path: str, path: str) -> None: orders = load_orders(json_path) if not orders: print("Нет заказов для экспорта") return fieldnames = ["id", "product", "quantity", "price", "total"] with open(path, 'w', encoding='utf-8', newline='') as f: writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader() for order in orders: row = order.copy() row["total"] = row["quantity"] * row["price"] row = {key: str(value) for key, value in row.items()} writer.writerow(row) print(f"Экспортировано {len(orders)} заказов в {path}") def main(): clear_orders("orders.json") add_order({ "id": 1, "product": "Ноутбук", "quantity": 2, "price": 45000.5 }, "orders.json") add_order({ "id": 2, "product": "Мышь", "quantity": 5, "price": 1500.75 }, "orders.json") add_order({ "id": 3, "product": "Клавиатура", "quantity": 3, "price": 3200 }, "orders.json") export_orders_to_csv("orders.json", "orders.csv") main()