Дмитрий
3 years ago
4 changed files with 88 additions and 18 deletions
@ -1,31 +1,56 @@
|
||||
"""Посчитать количество животных на каждую букву алфавита на странице 'Категория:Животные по алфавиту'. |
||||
Для запроса к вики используется библиотека 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_dict: dict = {} |
||||
for n in names: |
||||
first_letter = n[0] |
||||
count = names_dict.get(first_letter, 0) |
||||
names_dict[first_letter] = count + 1 |
||||
"""Получить словарь из первых букв и их количества для каждого |
||||
элемента в `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(): |
||||
wiki = wikipediaapi.Wikipedia("ru") |
||||
animals = get_all_titles_from_category("Категория:Животные по алфавиту") |
||||
# animals = get_all_titles_from_category("Категория:Знаменитые животные по алфавиту") |
||||
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__": |
||||
main() |
||||
category = "Категория:Животные по алфавиту" |
||||
# меньшая по количеству животных категория, использовал для тестов |
||||
# category = "Категория:Знаменитые животные по алфавиту" |
||||
main(category) |
||||
|
Loading…
Reference in new issue