chore: move task 1 to separate directory
This commit is contained in:
44
task1/task1.py
Normal file
44
task1/task1.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from dataclasses import dataclass
|
||||
import json
|
||||
from typing import Iterable
|
||||
|
||||
|
||||
@dataclass
|
||||
class Poem:
|
||||
name: str
|
||||
authors: str | list[str]
|
||||
body: str
|
||||
|
||||
|
||||
def load_data() -> list[Poem]:
|
||||
with open("task1_poems.json", "r") as file:
|
||||
return [
|
||||
Poem(**obj)
|
||||
for obj in json.load(file)
|
||||
]
|
||||
|
||||
def ask_author_to_search() -> str:
|
||||
return input("Имя автора для поиска: ")
|
||||
|
||||
def search_by_author(poems: list[Poem], author: str) -> list[Poem]:
|
||||
return [
|
||||
poem
|
||||
for poem in poems
|
||||
if isinstance(poem.authors, str) and poem.authors == author\
|
||||
or author in poem.authors
|
||||
]
|
||||
|
||||
def get_sorted_poems(poems: list[Poem]) -> list[Poem]:
|
||||
return sorted(poems, key=lambda poem: len(poem.body))
|
||||
|
||||
def print_poems(poems: Iterable[Poem]) -> None:
|
||||
for poem in poems:
|
||||
authors: str = poem.authors if isinstance(poem.authors, str) \
|
||||
else ", ".join(poem.authors)
|
||||
print(f"{authors} - {poem.name} ({len(poem.body)} символов)")
|
||||
|
||||
poems = load_data()
|
||||
author: str = ask_author_to_search()
|
||||
poems = search_by_author(poems, author)
|
||||
poems = get_sorted_poems(poems)
|
||||
print_poems(poems)
|
||||
32
task1/task1_poems.json
Normal file
32
task1/task1_poems.json
Normal file
@@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"name": "Spring",
|
||||
"authors": "John",
|
||||
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut."
|
||||
},
|
||||
{
|
||||
"name": "Autumn",
|
||||
"authors": ["John", "Jane"],
|
||||
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea variari voluptas distinguique possit, augeri amplificarique non possit. At."
|
||||
},
|
||||
{
|
||||
"name": "Nothing",
|
||||
"authors": "John",
|
||||
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna."
|
||||
},
|
||||
{
|
||||
"name": "VSCode",
|
||||
"authors": "Jane",
|
||||
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea variari voluptas distinguique possit, augeri amplificarique non possit. At etiam Athenis, ut e patre audiebam facete et urbane Stoicos irridente, statua est in quo a nobis philosophia defensa et collaudata est, cum id, quod maxime placeat, facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum defuturum, quas natura non depravata desiderat. Et quem ad me accedis, saluto: 'chaere,' inquam, 'Tite!' lictores, turma omnis chorusque: 'chaere, Tite!' hinc hostis mi."
|
||||
},
|
||||
{
|
||||
"name": "No name",
|
||||
"authors": ["Jane", "John"],
|
||||
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum."
|
||||
},
|
||||
{
|
||||
"name": "City",
|
||||
"authors": "John",
|
||||
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea variari voluptas distinguique possit, augeri amplificarique non possit. At etiam Athenis, ut e patre audiebam."
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user