Обновить README.md

This commit is contained in:
Савелий Борончук 2026-04-03 17:47:10 +00:00
parent cbffcc0083
commit 7f536ab740

127
README.md
View File

@ -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()