You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.2 KiB
56 lines
2.2 KiB
"""Посчитать количество животных на каждую букву алфавита на странице 'Категория:Животные по алфавиту'. |
|
Для запроса к вики используется библиотека 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_by_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)
|
|
|