|
|
|
"""Посчитать количество животных на каждую букву алфавита на странице 'Категория:Животные по алфавиту'.
|
|
|
|
Для запроса к вики используется библиотека 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)
|