Обновить README.md
This commit is contained in:
parent
cbffcc0083
commit
7f536ab740
127
README.md
127
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()
|
|
||||||
Loading…
Reference in New Issue
Block a user