def calculate_entropy(deck):
    counts = [0] * 52
    for card in deck:
        counts[card] += 1
    entropy = 0
    for count in counts:
        if count > 0:
            probability = count / len(deck)
            entropy -= probability * math.log2(probability)
    return entropy

def shuffle_deck(deck, iterations):
    for _ in range(iterations):
        random.shuffle(deck)

# Create a deck of cards
deck = list(range(52))

# Perform shuffling iterations and calculate disorder using entropy
summary = []
for iterations in range(101):
    shuffled_deck = deck.copy()
    shuffle_deck(shuffled_deck, iterations)
    entropy = calculate_entropy(shuffled_deck)
    summary.append((iterations, entropy))

# Print the results in a summary
print("Number of Shuffling Iterations\tEntropy")
for iterations, entropy in summary:
    print(f"{iterations}\t\t\t\t{entropy}")


# This code uses the itertools and random modules to create a deck of cards and shuffle them.
# The calculate_entropy function calculates the disorder of the deck using entropy.
# The shuffle_deck function shuffles the deck a specified number of times.
# The main part of the code performs shuffling iterations from 0 to 100
# and calculates the entropy for each iteration.
# Finally, it prints the results in a summary table.    OUTPUT: Number of Shuffling Iterations	Entropy
0				5.700439718141095
1				5.700439718141095
2				5.700439718141095
3				5.700439718141095
4				5.700439718141095
5				5.700439718141095
6				5.700439718141095
7				5.700439718141095
8				5.700439718141095
9				5.700439718141095
10				5.700439718141095
11				5.700439718141095
12				5.700439718141095
13				5.700439718141095
14				5.700439718141095
15				5.700439718141095
16				5.700439718141095
17				5.700439718141095
18				5.700439718141095
19				5.700439718141095
20				5.700439718141095
21				5.700439718141095
22				5.700439718141095
23				5.700439718141095
24				5.700439718141095
25				5.700439718141095
26				5.700439718141095
27				5.700439718141095
28				5.700439718141095
29				5.700439718141095
30				5.700439718141095
31				5.700439718141095
32				5.700439718141095
33				5.700439718141095
34				5.700439718141095
35				5.700439718141095
36				5.700439718141095
37				5.700439718141095
38				5.700439718141095
39				5.700439718141095
40				5.700439718141095
41				5.700439718141095
42				5.700439718141095
43				5.700439718141095
44				5.700439718141095
45				5.700439718141095
46				5.700439718141095
47				5.700439718141095
48				5.700439718141095
49				5.700439718141095
50				5.700439718141095
51				5.700439718141095
52				5.700439718141095
53				5.700439718141095
54				5.700439718141095
55				5.700439718141095
56				5.700439718141095
57				5.700439718141095
58				5.700439718141095
59				5.700439718141095
60				5.700439718141095
61				5.700439718141095
62				5.700439718141095
63				5.700439718141095
64				5.700439718141095
65				5.700439718141095
66				5.700439718141095
67				5.700439718141095
68				5.700439718141095
69				5.700439718141095
70				5.700439718141095
71				5.700439718141095
72				5.700439718141095
73				5.700439718141095
74				5.700439718141095
75				5.700439718141095
76				5.700439718141095
77				5.700439718141095
78				5.700439718141095
79				5.700439718141095
80				5.700439718141095
81				5.700439718141095
82				5.700439718141095
83				5.700439718141095
84				5.700439718141095
85				5.700439718141095
86				5.700439718141095
87				5.700439718141095
88				5.700439718141095
89				5.700439718141095
90				5.700439718141095
91				5.700439718141095
92				5.700439718141095
93				5.700439718141095
94				5.700439718141095
95				5.700439718141095
96				5.700439718141095
97				5.700439718141095
98				5.700439718141095
99				5.700439718141095
100				5.700439718141095   How cab the entropy stay the same?