"""Посчитать количество животных на каждую букву алфавита на странице 'Категория:Животные по алфавиту'. Для запроса к вики используется библиотека wikipediaapi. """ import wikipediaapi def get_all_titles_from_category(category: str) -> list: """Собираем названия всех страниц из `category`, формируем из них список и возвращаем его. """ wiki = wikipediaapi.Wikipedia("ru") cat = wiki.page(category) names = [c.title() for c in cat.categorymembers] return names # get_counted_dict_with_first_letters def get_count_list_by_first_letter(names: list) -> dict: """Получить словарь из первых букв и их количества для каждого элемента в `names`. Словарь ограничен русским алфавитом (без буквы Ы). Результат имеет вид {'А': 2, 'Б': 3, ...}. """ # Если изначально ограничить допустимые буквы алфавита, то можно # избежать лишних проверок и сделать код чище alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ" names_dict: dict = {l: 0 for l in alphabet} for name in names: first_letter = name[0] if first_letter not in alphabet: continue names_dict[first_letter] += 1 return names_dict def main(category: str): # print("Запрос выполняется и может занять несколько секунд...") animals = get_all_titles_from_category(category) result: dict = get_count_list_by_first_letter(animals) for names, count in result.items(): print(f"{names}: {count}") if __name__ == "__main__": category = "Категория:Животные по алфавиту" # меньшая по количеству животных категория, использовал для тестов # category = "Категория:Знаменитые животные по алфавиту" main(category)