Тестовое задание
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

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