Problem A
Cards
Languages
en
is
In this project, you need to implement three classes: Card, Deck, and Hand. Each class should be implemented in its own Python file. Two example main programs, each using the three classes, are given (see attached main1.py and main2.py).
Note that some of the other items depend on both passing the tests for class and instance variables as well as implementing the initializer correctly.
Card class (30 points)
-
(10 points) __init__(): An initializer with the parameters rank (either a string or an integer) and suit (a character). You can use the type() function to check the type of the parameter. You can assume that the constructor for Card is always invoked with valid parameter values.
-
(10 points) The Card class has two public instance variables: rank and suit. The rank is stored as an integer in the range 2–14. The suit is stored as a character: ’H’, ’S’, ’D’, or ’C’, for hearts, spades, diamonds, and clubs, respectively.
-
(10 points) __str__(): The string representation for an instance of a Card is a right justified field of three characters: the rank followed by the suit. The letters ’J’, ’Q’, ’K’, and ’A’, are used for ranks 11, 12, 13, and 14, respectively. For example, the string representation for the 10 of hearts and ace of spades is "10H" and
" AS", respectively.
Deck class (40 points)
-
(4 points) __init__(): An initializer without any parameters, which creates a deck of 52 cards. The deck is constructed in such a way that the cards are first ordered by their suit, HSDC (hearts first, then spades, diamonds, and clubs), and then by their rank in ascending order. The first three cards in a deck are therefore: “2H”, “3H”, and “4H”.
-
(9 points) The Deck class has one public instance variable, deck, which contains a list of 13 cards in each of the four suits, that is a total of 52 cards.
-
(9 points) __str__(): The string representation for an instance of a Deck lists all the cards in the deck in the order they appear (with a single space after each card), breaking into a new line after each 13 cards.
-
(9 points) shuffle(): Shuffles the cards in the deck using random.shuffle(). Note, you should not call random.seed within the class.
-
(9 points) deal(): Deals a single card from the deck by returning the card removed from the top of the deck (the first card). You may assume this is never called when the deck is empty.
Hand class (30 points)
-
(6 points) __init__(): An initializer without any parameters.
-
(8 points) The Hand class has one public instance variable, cards, for storing a list of up to 13 cards. Additionally, you must have the required constants, as can be seen from the attached programs.
-
(8 points) __str__(): The string representation for an instance of a Hand consists of single line containing the strings representation of each card (with a single space after each card). If the hand is empty, the string “Empty” is returned.
-
(8 points) add_card(card): Adds the given card to the hand. If the hand is full, then nothing happens.
Constants
You should use constants in your implentation. You need to figure out which constants to use, but as can be seen in the two main programs, you need at least the constant NUMBER_OF_CARDS in the Hand class.
Output of main1.py
5S QD KH 2C AS 10D JS KD 3C 10C 5C 5S 3H 8D 5H 7S AS 9C 8H 4D 10D 9H AD 7C JC KS 7H 3S 10H 10S JH 8C AH KH 8S JD QC 2D 2C QS 4S 6H 9S 6C 9D KC QH 4C 6S 7D 5D 2S 2H AC 6D 3D 4H QD JS KD 3C 10C 5C 5S 3H 8D 5H 7S AS 9C 8H 4D 10D 9H AD 7C JC KS 7H 3S 10H 10S JH 8C AH KH 8S JD QC 2D 2C QS 4S 6H 9S 6C 9D KC QH 4C 6S 7D 5D 2S 2H AC 6D 3D 4H QD