"""
3. Создать текстовый файл (не программно). Построчно записать фамилии сотрудников и величину их окладов (не менее
10 строк). Определить, кто из сотрудников имеет оклад менее 20 тысяч, вывести фамилии этих сотрудников. Выполнить
подсчёт средней величины дохода сотрудников.

Пример файла:
Иванов 23543.12
Петров 13749.32
"""


def main():
    # Здесь будет храниться количество сотрудников и средняя зарплата соответственно
    counts = [0, 0]

    print("Список сотрудников с окладом менее 20 тысяч: ")
    try:
        with open(r"task03.txt") as f_obj:
            for line in f_obj:
                tokens = line.split()

                try:
                    salary = float(tokens[1])
                except ValueError:
                    print(f"Какая-то ошибка в файле... Проверьте зарплату следующего сотрудника: {tokens[0]}")
                else:
                    if salary < 20_000:
                        print(tokens[0])

                    # Небольшой хук, чтобы избежать длинной арифметики
                    # Ничего личного, просто попытка поэкспериментировать :)

                    # Небольшие математические преобразования позволяют получить следующую формулу:
                    # новая ср. зп = старая ср. зп + добавочная ср. зп,
                    # где добавочная ср. зп = (зп нового сотрудника - старая ср.зп) / новое кол-во сотрудников

                    # Определяем добавочную среднюю зарплату для нового количества сотрудников
                    add_avg_salary = (salary - counts[1]) / (counts[0] + 1)

                    # Добавляем 1 нового сотрудника и добавочную среднюю зарплату
                    counts = [sum(i) for i in zip(counts, [1, add_avg_salary])]
    except IOError:
        print("Ошибка ввода/вывода! Сделайте с этим что-нибудь...")

    try:
        print(f"Средняя величина дохода сотрудников: {counts[1]}")
    except ZeroDivisionError:
        print("Что-то не так с количеством сотрудников, проверьте файл...")


if __name__ == '__main__':
    main()
