Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import collections
- import re
- def get_key(item):
- return item[1]
- def is_female(name):
- right_ending = name[1][-1] in ["я", "а"]
- not_male = name[1] not in ["Илья", "Лёва", "Никита"]
- exceptional_case = name[1] == "Любовь"
- return exceptional_case or (right_ending and not_male)
- def make_stat(filename):
- """
- Функция вычисляет статистику по именам за каждый год с учётом пола.
- """
- file = open(filename, "r", encoding="cp1251")
- data = 0
- statistic = {}
- counter = collections.Counter()
- for line in file:
- if line[2:6] != '<tr>':
- continue
- if line[27] == 'h':
- if data != 0:
- statistic[data] = counter
- counter = collections.Counter()
- data = line[30:34]
- continue
- name = re.search(r'[а-яА-ЯёЁ]+ [а-яА-ЯёЁ]+', line).group().split()
- gender = "М"
- if is_female(name):
- gender = "Ж"
- counter[name[1] + '(' + gender + ')'] += 1
- statistic[data] = counter
- file.close()
- return statistic
- def extract_years(stat):
- """
- Функция принимает на вход вычисленную статистику и выдаёт список годов,
- упорядоченный по возрастанию.
- """
- return sorted(stat.keys())
- def extract_general(stat):
- """
- Функция принимает на вход вычисленную статистику и выдаёт список tuple'ов
- (имя, количество) общей статистики для всех имён.
- Список должен быть отсортирован по убыванию количества.
- """
- names_stat = collections.Counter()
- for year in stat:
- for name in stat[year]:
- names_stat[name[:len(name) - 3]] += stat[year][name]
- return sorted(names_stat.items(), key=get_key, reverse=True)
- def extract_general_male(stat):
- """
- Функция принимает на вход вычисленную статистику и выдаёт список tuple'ов
- (имя, количество) общей статистики для имён мальчиков.
- Список должен быть отсортирован по убыванию количества.
- """
- names_male_stat = collections.Counter()
- for year in stat:
- for name in stat[year]:
- if name[-2] == "Ж":
- continue
- names_male_stat[name[:len(name) - 3]] += stat[year][name]
- return sorted(names_male_stat.items(), key=get_key, reverse=True)
- def extract_general_female(stat):
- """
- Функция принимает на вход вычисленную статистику и выдаёт список tuple'ов
- (имя, количество) общей статистики для имён девочек.
- Список должен быть отсортирован по убыванию количества.
- """
- names_female_stat = collections.Counter()
- for year in stat:
- for name in stat[year]:
- if name[-2] == "М":
- continue
- names_female_stat[name[:len(name) - 3]] += stat[year][name]
- return sorted(names_female_stat.items(), key=get_key, reverse=True)
- def extract_year(stat, year):
- """
- Функция принимает на вход вычисленную статистику и год.
- Результат — список tuple'ов (имя, количество) общей статистики для всех
- имён в указанном году.
- Список должен быть отсортирован по убыванию количества.
- """
- names_stat = collections.Counter()
- for name in stat[year]:
- names_stat[name[:len(name) - 3]] += stat[year][name]
- return sorted(names_stat.items(), key=get_key, reverse=True)
- def extract_year_male(stat, year):
- """
- Функция принимает на вход вычисленную статистику и год.
- Результат — список tuple'ов (имя, количество) общей статистики для всех
- имён мальчиков в указанном году.
- Список должен быть отсортирован по убыванию количества.
- """
- names_stat_male = collections.Counter()
- for name in stat[year]:
- if name[-2] == "Ж":
- continue
- names_stat_male[name[:len(name) - 3]] += stat[year][name]
- return sorted(names_stat_male.items(), key=get_key, reverse=True)
- def extract_year_female(stat, year):
- """
- Функция принимает на вход вычисленную статистику и год.
- Результат — список tuple'ов (имя, количество) общей статистики для всех
- имён девочек в указанном году.
- Список должен быть отсортирован по убыванию количества.
- """
- names_stat_male = collections.Counter()
- for name in stat[year]:
- if name[-2] == "М":
- continue
- names_stat_male[name[:len(name) - 3]] += stat[year][name]
- return sorted(names_stat_male.items(), key=get_key, reverse=True)
- if __name__ == '__main__':
- stat = make_stat("home.html")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement