Processing_data_about_compa.../main.py

84 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. Читает текстовый файл с данными (каждая строка: имя,отдел,зарплата,стаж).
# Возвращает список словарей: [{"name": str, "dept": str, "salary": float, "exp": float}, ...].
from sys import exec_prefix
def load_data(filepath: str) -> list[dict]:
employees = []
filepath = "data/employees.txt"
try:
with open(filepath, "r", encoding="utf-8") as file:
for line_number, line in enumerate(file, 1):
# Чищу строку от пробелов по краям и скипаю пустые строки, а то хз кто там этот емплоес.тииксти писал
line = line.strip()
if not line:
continue
try:
# делим строку по запятой
parts = [p.strip() for p in line.split(",")] # зачем нейронки если всю эту строку мне пайчарм вставил после знака равно???
if len(parts) != 4: # ну вдруг там не 4 колонки
print(f"Ошибка в строке {line_number}: надо 4 значения, а получил {len(parts)}.")
continue
employee = {
"name": parts[0],
"dept": parts[1],
"salary": float(parts[2]),
"exp": float(parts[3])
}
employees.append(employee)
except ValueError as e:
print(f"Ошибка преобразования типов в строке {line_number}: {e}")
except FileNotFoundError:
print(f"Ошибка: Файл по адресу '{filepath}' не найден.")
except Exception as e:
print(f"Произошла непредвиденная ошибка: {e}")
return employees
# 2. Возвращает новый список, содержащий только сотрудников указанного отдела.
def filter_by_department(employees: list[dict], department: str) -> list[dict]:
pass
# 3. Возвращает новый список с сотрудниками, чей стаж (exp) не меньше min_years.
def filter_by_experience(employees: list[dict], min_years: float) -> list[dict]:
pass
# 4. Вычисляет среднюю зарплату по переданному списку сотрудников. Если список пуст, возвращает 0.0.
def calculate_average_salary(employees: list[dict]) -> float:
pass
# 5. Возвращает словарь сотрудника с максимальной зарплатой. При пустом списке возвращает None.
def find_highest_paid(employees: list[dict]) -> dict | None:
pass
# 6. Группирует сотрудников по отделам. Возвращает словарь, где ключ название отдела,
# значение список сотрудников этого отдела.
def group_by_department(employees: list[dict]) -> dict[str, list[dict]]:
pass
# 7. Увеличивает значение salary каждого сотрудника в переданном списке на bonus_percent процентов.
# Изменяет исходные словари (модификация на месте). Функция ничего не возвращает.
def add_bonus(employees: list[dict], bonus_percent: float) -> None:
pass
# 8. Принимает словарь одного сотрудника, возвращает отформатированную строку:
# "Имя: {name}, Отдел: {dept}, Зарплата: {salary:.2f} руб., Стаж: {exp} лет".
def format_employee_string(employee: dict) -> str:
pass
# 9. Возвращает новый список сотрудников, отсортированный по зарплате
# (по возрастанию, если reverse=False, иначе по убыванию).
def sort_by_salary(employees: list[dict], reverse: bool = False) -> list[dict]:
pass
# 10. Сохраняет в файл по пути filepath текстовый отчёт:
# для каждого сотрудника строка, полученная функцией format_employee_string().
# Если список пуст, записывает строку "Нет данных".
def save_report(employees: list[dict], filepath: str) -> None:
pass