1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
|