Skip to content

Commit d087a4e

Browse files
committed
Map excercise
1 parent 953b61b commit d087a4e

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

maps/maps.py

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,35 @@
44
class MapExercise:
55
@staticmethod
66
def rating(list_of_movies: list[dict]) -> float:
7-
"""
8-
!!Задание нужно решить используя map!!
9-
Посчитать средний рейтинг фильмов (rating_kinopoisk) у которых две или больше стран.
10-
Фильмы у которых рейтинг не задан или равен 0 не учитывать в расчете среднего.
7+
MIN_NUMBER_OF_COUNTRIES = 2
118

12-
:param list_of_movies: Список фильмов.
13-
Ключи словаря: name, rating_kinopoisk, rating_imdb, genres, year, access_level, country
14-
:return: Средний рейтинг фильмов у которых две или больше стран
15-
"""
16-
pass
9+
def is_suitable_movie(movie: dict) -> bool:
10+
if len(movie["country"].split(",")) < MIN_NUMBER_OF_COUNTRIES:
11+
return False
12+
if movie["rating_kinopoisk"] == "" or float(movie["rating_kinopoisk"]) == 0:
13+
return False
14+
return True
15+
16+
ratings = list(
17+
map(
18+
lambda movie: float(movie["rating_kinopoisk"]),
19+
filter(is_suitable_movie, list_of_movies),
20+
)
21+
)
22+
23+
return sum(ratings) / len(ratings)
1724

1825
@staticmethod
1926
def chars_count(list_of_movies: list[dict], rating: Union[float, int]) -> int:
20-
"""
21-
!!Задание нужно решить используя map!!
22-
Посчитать количество букв 'и' в названиях всех фильмов с рейтингом (rating_kinopoisk) больше
23-
или равным заданному значению
27+
CHAR = "и"
2428

25-
:param list_of_movies: Список фильмов
26-
Ключи словаря: name, rating_kinopoisk, rating_imdb, genres, year, access_level, country
27-
:param rating: Заданный рейтинг
28-
:return: Количество букв 'и' в названиях всех фильмов с рейтингом больше
29-
или равным заданному значению
30-
"""
31-
pass
29+
return sum(
30+
map(
31+
lambda movie: movie["name"].count(CHAR),
32+
filter(
33+
lambda movie: movie["rating_kinopoisk"]
34+
and float(movie["rating_kinopoisk"]) >= rating,
35+
list_of_movies,
36+
),
37+
)
38+
)

maps/test_maps.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@ def list_of_movies(self) -> list[dict]:
1414
list_of_movies = list(DictReader(movies))
1515
return list_of_movies
1616

17-
@pytest.mark.skip(reason="MapExercise.rating is not implemented")
1817
def test_rating(self, list_of_movies: list[dict]) -> None:
1918
average_rating = MapExercise.rating(list_of_movies)
2019
assert round(average_rating, 15) == 6.809410385259628
2120

22-
@pytest.mark.skip(reason="MapExercise.chars_count is not implemented")
2321
def test_chars_count(self, list_of_movies: list[dict]) -> None:
2422
chars_count = MapExercise.chars_count(list_of_movies, 5)
2523
assert chars_count == 3850

0 commit comments

Comments
 (0)