# Дан файл с таблицей в формате TSV с информацией о росте школьников разных классов.

# Напишите программу, которая прочитает этот файл и подсчитает для каждого класса средний рост учащегося.

# Файл состоит из набора строк, каждая из которых представляет собой три поля:
# Класс Фамилия Рост

# Класс обозначается только числом. Буквенные модификаторы не используются. 
# Номер класса может быть от 1 до 11 включительно. 
# В фамилии нет пробелов, а в качестве роста используется натуральное число, 
# но при подсчёте среднего требуется вычислить значение в виде вещественного числа.

# Выводить информацию о среднем росте следует в порядке 
# возрастания номера класса (для классов с первого по одиннадцатый). 
# Если про какой-то класс нет информации, необходимо вывести напротив него прочерк.

# подготовливаем словарь для сбора данных о ростах учеников в классе
dict = {
    1: {
        'count': 0,
        'total': 0
    }
}

# нам лень заполнять словарь для всех классов вручную, поэтому мы делаем это в цикле
for i in range(2, 12):
    dict[i] = {
        'count': 0,
        'total': 0
    }


# функция, которая выводит число с определённым количеством знаков после запятой
# она нам тут не пригодилась, но пусть будет
def toFixed(f, x):
    r = list(str(f)).index('.') + 1
    return str(f)[0: r + x]


# открываем наш файл
with open('dataset_3380_5.txt') as text:
    # прогоняем по циклу все строки
    for row in text:
        # вычленяем из строки только класс и рост ученика
        student = [i for i in row.split() if i.isdigit()]

        # заносим данные в наш подготовленный словарь
        dict[int(student[0])]['total'] += int(student[1])
        dict[int(student[0])]['count'] += 1

# проходимся по словарю и записываем для каждого класса средний рост
# или прочерк, если никто в классе не учится
with open('dataset_3380_5.txt', 'w') as text:
    for key in dict:
        text.write(str(key) + ' ' + (
            str(dict[key]['total'] / dict[key]['count']) if dict[key]['total'] and dict[key]['count'] else '-') + '\n')

# Второй вариант решения

# # Снова создаем неочевидный список, но он более ёмкий, нежели словарь
# res = [[0, 0] for i in range(11)]

# # Создаем фунцию, для наполнения нашего списка
# def fillArr(classNum, height):
#   res[int(classNum) - 1][0] += 1
#   res[int(classNum) - 1][1] += int(height)


# with open('dataset_3380_5.txt') as text:
#   for row in text:
#     # проходим по строчкам, выделяем из них цифры и наполняем наш массив
#     x = [it for it in row.strip().split() if it.isdigit()]
#     fillArr(x[0], x[1])

# with open('dataset_3380_5.txt', 'w') as text:
#   # Записываем в файл данные из нашего списка
#   # предварительно обработав их
#   for i, el in enumerate(res):
#     text.write(str(i + 1) + ' ' + (str(el[1] / el[0]) + '\n') if el[0] else '-\n')


# Наш вывод должен выглядеть так:
# 1 124.58333333333333
# 2 128.83333333333334
# 3 133.66666666666666
# 4 140.3
# 5 147.0
# 6 155.0
# 7 158.2
# 8 164.0
# 9 169.4
# 10 171.2
# 11 174.66666666666666
