Обновить 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