mirror of
https://github.com/DavidGailleton/42-Piscine_Python.git
synced 2026-03-13 20:56:54 +01:00
Finish 03
This commit is contained in:
@@ -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:
|
||||
|
||||
366
03/ex6/ft_analytics_dashboard.py
Normal file
366
03/ex6/ft_analytics_dashboard.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user