Inh E Ritance Design a Playing Card O B Ject Design a Playing Card O B

Inh E Ritance Design a Playing Card O B Ject Design a Playing Card O B

Design a Playing Card Object Design a Playing Card Object ! The suit of a card is 0 (clubs), 1 (diamonds), ! What cards would these represent? 2 (hearts), 3 (spades) ! The rank is its face value plus 11 (jack), 12 card1 = Card(1, 12) (queen), 13 (king), ace (1) card2 = Card(3, 1) card3 = Card(4, 3) November 8, 2010 2 November 8, 2010 4 Design a Playing Card Object ! The suit of a card is 0 (clubs), 1 (diamonds), 2 (hearts), 3 (spades) ! The rank is its face value plus 11 (jack), 12 Inheritance (queen), 13 (king), ace (1) class Card(object): """represents a standard playing card.""" def __init__(self, suit=0, rank=2): self.suit = suit self.rank = rank November 8, 2010 1 November 8, 2010 3 Class Attributes vs Instance Attributes Creating and Printing a Card ! Class attributes are defined inside the class but ! We can now create and print cards. outside its methods. They are associated with the Class itself. >>> card1 = Card(2, 11) ! Instance attributes, such as suit and rank, are >>> print card1 associated with instances of the class. Jack of Hearts # Inside the Card class: suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades'] rank_names = [None, 'Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King'] November 8, 2010 6 November 8, 2010 8 Design a Playing Card Object Class Attributes vs Instance Attributes ! What cards would these represent? ! Our __str__ method should extract the suit name and rank name from the class attributes # Inside the Card class: card1 = Card(1, 12) # Queen of diamonds suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades'] card2 = Card(3, 1) # Ace of spades rank_names = [None, 'Ace', '2', '3', '4', '5', '6', '7', card3 = Card(4, 3) # No such card '8', '9', '10', 'Jack', 'Queen', 'King'] def __str__(self): return '%s of %s' % (Card.rank_names[self.rank], Card.suit_names[self.suit]) November 8, 2010 5 November 8, 2010 7 Comparing Cards Print the Deck !We can override the <, >, and == operators by ! The __str__ method constructs a list of the string defining the special __cmp__ method. representation of the cards. ! >>> card1 = Card(1,11) We convert the list to a string by using join(). >>> card2 = Card(1,6) #inside class Deck: >>> card1 > card2 True >>> card1 == card2 def __str__(self): False res = [] >>> card3 = Card(1,11) >>> card3 == card1 for card in self.cards: True res.append(str(card)) >>> return '\n'.join(res) ) November 8, 2010 10 November 8, 2010 12 Comparing Cards Defining a Deck of Cards !We can override the <, >, and == operators by ! We can define a deck as a list of cards and use a defining the special __cmp__ method. nested loop to insert one of each card into the Deck. # inside class Card: class Deck(object): def __cmp__(self, other): # check the suits def __init__(self): if self.suit > other.suit: return 1 if self.suit < other.suit: return -1 self.cards = [] for suit in range(4): # suits are the same... check ranks for rank in range(1, 14): if self.rank > other.rank: return 1 card = Card(suit, rank) if self.rank < other.rank: return -1 # ranks are the same... it's a tie self.cards.append(card) return 0 November 8, 2010 9 November 8, 2010 11 Deal, Add, Shuffle Initializing a Hand ! These methods are easy to write if we use built-in ! We need to override the __init__ method Python list methods and the random module. inherited from Deck. ! All the other methods remain unchanged. #inside class Deck: class Hand(Deck): def pop_card(self): """represents a hand of playing cards""" return self.cards.pop() def add_card(self, card): def __init__(self, label=''): self.cards.append(card) self.cards = [] def shuffle(self): random.shuffle(self.cards) self.label = label November 8, 2010 14 November 8, 2010 16 Print the Deck Inheritance ! The __str__ method constructs a list of the string ! Inheritance is the ability to define a new class (the representation of the cards. child) that is a modified version of an existing class (the parent). ! We convert the list to a string by using join(). >>> deck = Deck() ! A hand in a game of cards is similar to a deck. Its a >>> print deck list of cards that we need to add, deal, shuffle, etc. Ace of Clubs ! 2 of Clubs This definition says a Hand inherits from Deck 3 of Clubs ... 10 of Spades class Hand(Deck): Jack of Spades """represents a hand of playing cards""" Queen of Spades King of Spades November 8, 2010 13 November 8, 2010 15 Inclass Exercises • Write a __cmp__ method for Time objects. Hint: you might consider using integer subtraction. • Write a Deck method named sort that uses the list method sort to sort the cards in a Deck. The list sort method will automatically use the __cmp__ method we defined to determine sort order. • Write a function deal(n) that deals a hand of n cards and returns it. November 8, 2010 18 Dealing a Hand ! Both Deck and Hand have the same methods, which can be used to deal a hand. >>> hand = Hand('new hand') >>> print hand.cards [] >>> print hand.label new hand >>> deck = Deck() >>> card = deck.pop_card() >>> hand.add_card(card) >>> print hand King of Spades November 8, 2010 17.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    5 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us