diff --git a/03/ex5/ft_data_stream.py b/03/ex5/ft_data_stream.py index c8b2eff..b058488 100644 --- a/03/ex5/ft_data_stream.py +++ b/03/ex5/ft_data_stream.py @@ -52,8 +52,8 @@ def game_data_stream_processor( ) -> None: print("=== Game Data Stream Processor ===\n") print(f"Processing {len(events)} game events...\n") - log = event_analytics(events) try: + log = event_analytics(events) while True: next(log) except StopIteration as res: diff --git a/03/ex6/ft_analytics_dashboard.py b/03/ex6/ft_analytics_dashboard.py new file mode 100644 index 0000000..293e048 --- /dev/null +++ b/03/ex6/ft_analytics_dashboard.py @@ -0,0 +1,366 @@ +def list_comprehension_example( + data: dict[str, dict[str, int | str] | list[dict[str, str | int | bool]]], +) -> None: + print("=== List Comprehension Examples ===") + high_score = [ + x for x in data["players"] if data["players"][x]["total_score"] > 2000 + ] + print(f"High scorers (>2000): {high_score}") + scores_doubled = [ + data["players"][x]["total_score"] * 2 for x in data["players"] + ] + print(f"Scores doubled: {scores_doubled}") + active_players = [ + x + for x in data["players"] + if data["players"][x]["sessions_played"] > 29 + ] + print(f"Active players: {active_players}") + + +def dict_comprehension_example( + data: dict[str, dict[str, int | str] | list[dict[str, str | int | bool]]], +) -> None: + print("=== Dict Comprehension Examples ===") + player_scores = { + player: data["players"][player]["total_score"] + for player in data["players"] + } + print(f"Player scores: {player_scores}") + score_categories = {category["mode"]: 1 for category in data["sessions"]} + print(f"Score categories: {score_categories}") + achievements_count = { + player: data["players"][player]["achievements_count"] + for player in data["players"] + } + print(f"Achievement counts: {achievements_count}") + + +def set_comprehension_example( + data: dict[str, dict[str, int | str] | list[dict[str, str | int | bool]]], +) -> None: + print("=== Set Comprehension Examples ===") + unique_player: set[str] = { + session["player"] for session in data["sessions"] + } + print(f"Unique player: {unique_player}") + unique_achievements: set[str] = { + achievement for achievement in data["achievements"] + } + print(f"unique achievements: {unique_achievements}") + available_gamemode: set[str] = {gm for gm in data["game_modes"]} + print(f"Available gamemode: {available_gamemode}") + + +def combined_analysis( + data: dict[str, dict[str, int | str] | list[dict[str, str | int | bool]]], +) -> None: + print("=== combined Analysis ===") + unique_player: set[str] = { + session["player"] for session in data["sessions"] + } + print(f"Total player: {len(unique_player)}") + unique_achievements: set[str] = { + achievement for achievement in data["achievements"] + } + print(f"Total unique achievements: {len(unique_achievements)}") + total_score: list[int] = [session["score"] for session in data["sessions"]] + avg_score = sum(total_score) / len(total_score) + print(f"Average score: {avg_score:.2f}") + performers = { + player: data["players"][player]["total_score"] + for player in data["players"] + } + best_player = max(performers, key=performers.get) + print(f"Top performer: {best_player}\ + ({data['players'][best_player]['total_score']}\ + points, {data['players'][best_player]['achievements_count']} achievements)") + + +def comprehension_tester( + data: dict[str, dict[str, int | str] | list[dict[str, str | int | bool]]], +) -> None: + try: + print("=== game Analytics Dashboard ===\n") + list_comprehension_example(data) + print() + dict_comprehension_example(data) + print() + set_comprehension_example(data) + print() + combined_analysis(data) + except Exception as err: + print(err) + + +if __name__ == "__main__": + data = { + "players": { + "alice": { + "level": 41, + "total_score": 2824, + "sessions_played": 13, + "favorite_mode": "ranked", + "achievements_count": 5, + }, + "bob": { + "level": 16, + "total_score": 4657, + "sessions_played": 27, + "favorite_mode": "ranked", + "achievements_count": 2, + }, + "charlie": { + "level": 44, + "total_score": 9935, + "sessions_played": 21, + "favorite_mode": "ranked", + "achievements_count": 7, + }, + "diana": { + "level": 3, + "total_score": 1488, + "sessions_played": 21, + "favorite_mode": "casual", + "achievements_count": 4, + }, + "eve": { + "level": 33, + "total_score": 1434, + "sessions_played": 81, + "favorite_mode": "casual", + "achievements_count": 7, + }, + "frank": { + "level": 15, + "total_score": 8359, + "sessions_played": 85, + "favorite_mode": "competitive", + "achievements_count": 1, + }, + }, + "sessions": [ + { + "player": "bob", + "duration_minutes": 94, + "score": 1831, + "mode": "competitive", + "completed": False, + }, + { + "player": "bob", + "duration_minutes": 32, + "score": 1478, + "mode": "casual", + "completed": True, + }, + { + "player": "diana", + "duration_minutes": 17, + "score": 1570, + "mode": "competitive", + "completed": False, + }, + { + "player": "alice", + "duration_minutes": 98, + "score": 1981, + "mode": "ranked", + "completed": True, + }, + { + "player": "diana", + "duration_minutes": 15, + "score": 2361, + "mode": "competitive", + "completed": False, + }, + { + "player": "eve", + "duration_minutes": 29, + "score": 2985, + "mode": "casual", + "completed": True, + }, + { + "player": "frank", + "duration_minutes": 34, + "score": 1285, + "mode": "casual", + "completed": True, + }, + { + "player": "alice", + "duration_minutes": 53, + "score": 1238, + "mode": "competitive", + "completed": False, + }, + { + "player": "bob", + "duration_minutes": 52, + "score": 1555, + "mode": "casual", + "completed": False, + }, + { + "player": "frank", + "duration_minutes": 92, + "score": 2754, + "mode": "casual", + "completed": True, + }, + { + "player": "eve", + "duration_minutes": 98, + "score": 1102, + "mode": "casual", + "completed": False, + }, + { + "player": "diana", + "duration_minutes": 39, + "score": 2721, + "mode": "ranked", + "completed": True, + }, + { + "player": "frank", + "duration_minutes": 46, + "score": 329, + "mode": "casual", + "completed": True, + }, + { + "player": "charlie", + "duration_minutes": 56, + "score": 1196, + "mode": "casual", + "completed": True, + }, + { + "player": "eve", + "duration_minutes": 117, + "score": 1388, + "mode": "casual", + "completed": False, + }, + { + "player": "diana", + "duration_minutes": 118, + "score": 2733, + "mode": "competitive", + "completed": True, + }, + { + "player": "charlie", + "duration_minutes": 22, + "score": 1110, + "mode": "ranked", + "completed": False, + }, + { + "player": "frank", + "duration_minutes": 79, + "score": 1854, + "mode": "ranked", + "completed": False, + }, + { + "player": "charlie", + "duration_minutes": 33, + "score": 666, + "mode": "ranked", + "completed": False, + }, + { + "player": "alice", + "duration_minutes": 101, + "score": 292, + "mode": "casual", + "completed": True, + }, + { + "player": "frank", + "duration_minutes": 25, + "score": 2887, + "mode": "competitive", + "completed": True, + }, + { + "player": "diana", + "duration_minutes": 53, + "score": 2540, + "mode": "competitive", + "completed": False, + }, + { + "player": "eve", + "duration_minutes": 115, + "score": 147, + "mode": "ranked", + "completed": True, + }, + { + "player": "frank", + "duration_minutes": 118, + "score": 2299, + "mode": "competitive", + "completed": False, + }, + { + "player": "alice", + "duration_minutes": 42, + "score": 1880, + "mode": "casual", + "completed": False, + }, + { + "player": "alice", + "duration_minutes": 97, + "score": 1178, + "mode": "ranked", + "completed": True, + }, + { + "player": "eve", + "duration_minutes": 18, + "score": 2661, + "mode": "competitive", + "completed": True, + }, + { + "player": "bob", + "duration_minutes": 52, + "score": 761, + "mode": "ranked", + "completed": True, + }, + { + "player": "eve", + "duration_minutes": 46, + "score": 2101, + "mode": "casual", + "completed": True, + }, + { + "player": "charlie", + "duration_minutes": 117, + "score": 1359, + "mode": "casual", + "completed": True, + }, + ], + "game_modes": ["casual", "competitive", "ranked"], + "achievements": [ + "first_blood", + "level_master", + "speed_runner", + "treasure_seeker", + "boss_hunter", + "pixel_perfect", + "combo_king", + "explorer", + ], + } + comprehension_tester(data)