There are 52 cards in a deck of playing cards. The ranks go from ace to king and the suits are one of clubs, spades, hearts, and diamonds.
Create a playing card class that has properties to store rank and suit. The class should override the
__str__ function, such that printing a card prints its rank and suit. For example,
5 of hearts.
Generate a list of card objects that contains all 52 cards in a deck. Write a function that prints every card in this list. Then write a second function that takes a list of cards and shuffles them manually. Your goal is to implement a perfect shuffling algorithm, which has a time complexity of O(N). (Hint: this is the same algorithm that
random.shuffle uses which you can research).
Make your card class
sort-able, such that a list of cards representing a deck can be sorted the same way a list of numbers can. To do this, you only need to override the
__lt__(a, b) method, as Python’s sort only uses the less-than operator to compare elements. Assume that the order of playing card strength is like in the picture above. Check your implementation by sorting a shuffled deck.