summaryrefslogtreecommitdiff
path: root/py03/ex3/ft_achievement_tracker.py
diff options
context:
space:
mode:
Diffstat (limited to 'py03/ex3/ft_achievement_tracker.py')
-rwxr-xr-xpy03/ex3/ft_achievement_tracker.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/py03/ex3/ft_achievement_tracker.py b/py03/ex3/ft_achievement_tracker.py
new file mode 100755
index 0000000..81e9c15
--- /dev/null
+++ b/py03/ex3/ft_achievement_tracker.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+# https://www.freecodecamp.org/learn/python-v9/review-dictionaries-and-sets/review-dictionaries-and-sets
+
+import random
+
+
+class Player:
+ def __init__(self, name: str, achievements: set[str]):
+ self.name = name
+ self.achievements = achievements
+
+
+def gen_player_achievements(player: str, achievements: set[str]):
+ pa = set()
+ list_ach = list(achievements)
+ for _ in range(9):
+ achievement = random.choice(list_ach)
+ pa.add(achievement)
+ return pa
+
+
+if __name__ == "__main__":
+ print("=== Achievement Tracker System ===")
+ achievements = {'Crafting Genius',
+ 'World Savior',
+ 'Master Explorer',
+ 'Collector Supreme',
+ 'Untouchable',
+ 'Boss Slayer',
+ 'Strategist',
+ 'Unstoppable',
+ 'Speed Runner',
+ 'Survivor',
+ 'Treasure Hunter',
+ 'First Steps',
+ 'Sharp Mind'}
+ print()
+ black_for = '\033[0;30m'
+ pink_bak = '\033[48;5;205m'
+ stp_color = '\033[0m'
+ # print players' achievement(s)
+ players_list: list[str] = ['Alice', 'Bob', 'Charlie', 'Dylan']
+ players = []
+ i = 0
+ for player in players_list:
+ players.append(Player(player,
+ gen_player_achievements(player, achievements)))
+ print(f"{black_for}{pink_bak}Player {players[i].name}:"
+ f"{stp_color} {players[i].achievements}")
+ i += 1
+ print()
+ union = players[0].achievements.union(players[1].achievements,
+ players[2].achievements,
+ players[3].achievements)
+ print(f"{black_for}{pink_bak}All distinct achievements:"
+ f"{stp_color} {union}")
+ print()
+ common_achievements = players[0].achievements.intersection(
+ players[1].achievements,
+ players[2].achievements,
+ players[3].achievements)
+ print(f"{black_for}{pink_bak}Common achievements:"
+ f"{stp_color} {common_achievements}")
+ print()
+ # print players' unique achievement(s)
+ print("Only", players[0].name, "has: ",
+ players[0].achievements.difference(players[1].achievements,
+ players[2].achievements,
+ players[3].achievements))
+ print("Only", players[1].name, "has: ",
+ players[1].achievements.difference(players[0].achievements,
+ players[2].achievements,
+ players[3].achievements))
+ print("Only", players[2].name, "has: ",
+ players[2].achievements.difference(players[1].achievements,
+ players[0].achievements,
+ players[3].achievements))
+ print("Only", players[3].name, "has: ",
+ players[3].achievements.difference(players[1].achievements,
+ players[2].achievements,
+ players[0].achievements))
+ print()
+ # print what each player is missing
+ i = 0
+ # iterate through the list of string
+ for player in players_list:
+ missing = set()
+ for key in achievements:
+ # check players' achievement in list of instances
+ if key not in players[i].achievements:
+ missing.add(key)
+ print(f"{black_for}{pink_bak}{players[i].name}"
+ f" is missing\033[0m {missing}")
+ i += 1