Загрузка данных


import csv


def load_kings(a):
    b = []

    with open(a, encoding='utf-8', newline='') as c:
        d = csv.DictReader(c, delimiter=';')

        for e in d:
            b.append((
                e['king'],
                int(e['start_year']),
                int(e['end_year'])
            ))

    return b


def filter_by_century(a, century):
    b = (century - 1) * 100
    c = century * 100

    d = [
        e[0]
        for e in a
        if e[1] < c and e[2] >= b
    ]

    return sorted(d)


def longest_ruling(a, n):
    b = sorted(
        a,
        key=lambda c: (-(c[2] - c[1]), c[0])
    )

    return [c[0] for c in b[:n]]


def report(a):
    b = len(a)
    c = sum(d[2] - d[1] for d in a) // b
    d = longest_ruling(a, 1)[0]

    return (
        f'Всего правителей: {b}\n'
        f'Средняя длина правления: {c} лет\n'
        f'Самый долгий правитель: {d}'
    )