diff --git a/README.md b/README.md index bd758a2..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,127 +0,0 @@ -def load_trips(path): - data = [] - try: - # пробуем открыть файл - f = open(path, "r", encoding="utf-8") - except: - # если файла нет или ошибка открытия - print("Ошибка открытия файла:", path) - return data - # читаем построчно - for line in f: - line = line.strip() # убираем пробелы и переносы - if line: # если строка не пустая - data.append(line) - f.close() # закрываем файл - return data # возвращаем список строк - -def parse_trip(line): - parts = line.split(",") # разделяем по запятой - - if len(parts) < 5: # проверяем на корректность данных - return None - # формируем словарь с ключами - return { - "driver": parts[0].strip(), - "client": parts[1].strip(), - "distance": parts[2].strip(), - "price": parts[3].strip(), - "status": parts[4].strip().lower() # делаем статус маленькими буквами - } - -def convert_numeric_fields(trips): - for t in trips: - try: - t["distance"] = float(t["distance"]) # дистанция в число - except: - t["distance"] = 0 - - try: - t["price"] = float(t["price"]) # переводим цену в число - except: - t["price"] = 0 - return trips - -def filter_completed_trips(trips): - result = [] - for t in trips: - # оставляем только завершенные поездки - if t and t.get("status") == "завершен": - result.append(t) - return result - -def calculate_trip_cost_per_km(trip): - d = trip.get("distance", 0) - p = trip.get("price", 0) - if d == 0: - return 0 - return p / d #стоимость 1 км - -def add_cost_per_km(trips): - for t in trips: - # добовляем новое поле - t["cost_per_km"] = calculate_trip_cost_per_km(t) - return trips - -def group_trips_by_driver(trips): - grouped = {} - for t in trips: - name = t.get("driver", "Неизвестно") # если имя отсутствует - - if name not in grouped: - grouped[name] = [] # Создаем новый список для водителей - - grouped[name].append(t) # добовляем поездку в список - return grouped - -def calculate_driver_earnings(grouped): - result = {} - for driver, trips in grouped.items(): - total = 0 - for t in trips: - total += t.get("price", 0) # суммируем доход водителя - result[driver] = total - return result - -def find_top_driver(earnings): - best = "" - max_sum = 0 - for name, money in earnings.items(): - if money > max_sum: # ищем максимальный доход - max_sum = money - best = name - return best - -def format_report(top_driver, total_revenue, avg_cost): - report = [] - report.append("===== ОТЧЕТ ПО ТАКСИ =====") - report.append(f"Лучший водитель: {top_driver}") - report.append(f"Общая выручка: {round(total_revenue, 2)} руб.") - report.append(f"Средняя стоимость за км: {round(avg_cost, 2)} руб/км") - return "\n".join(report) - -def main(): - raw = load_trips("data.txt") # читаем файл - trips = [] - for line in raw: - trip = parse_trip(line) # разбираем строку в словарь - if trip: - trips.append(trip) - convert_numeric_fields(trips) # числа вместо строк - trips = filter_completed_trips(trips) # только завершённые поездки - add_cost_per_km(trips) # добавляем поле с ценой за км - grouped = group_trips_by_driver(trips) # группируем по водителям - earnings = calculate_driver_earnings(grouped) # считаем доход - best_driver = find_top_driver(earnings) # находим лучшего - total = 0 - sum_cost = 0 - count = 0 - for t in trips: - total += t.get("price", 0) - sum_cost += t.get("cost_per_km", 0) - count += 1 - avg = sum_cost / count if count else 0 # средняя цена за км - report = format_report(best_driver, total, avg) # готовим текст отчёта - print(report) # выводим в консоль -if __name__ == "__main__": - main() \ No newline at end of file