DEV Community

Cover image for Intro to Python: Day 8 - Playing Poker with Python (OOP)
James Hubert
James Hubert

Posted on • Edited on

Intro to Python: Day 8 - Playing Poker with Python (OOP)

Hi there 👋 I'm a New York City based web developer documenting my journey with React, React Native, and Python for all to see. Please follow my dev.to profile or my twitter for updates and feel free to reach out if you have questions. Thanks for your support!

This is a fun one. As some of you know I have been taking the boot.dev backend programming online course and am just finishing up another module related to OOP.

In this lesson we created a DeckOfCards class, which had the poker suits and hands defined on it as class variables. Then we define the constructor so as to build a deck of 52 cards of unique suit + rank combinations (e.g. "Ace of Spades") represented by tuples (e.g. card = ("Spade", "Ace")).

The following code shows the beginnings of the class with those class variables defined on them.

import random

class DeckOfCards:
    SUITS = ["Hearts", "Diamonds", "Clubs", "Spades"]
    RANKS = [
        "Ace",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "Jack",
        "Queen",
        "King",
    ]
Enter fullscreen mode Exit fullscreen mode

The random package is also imported for us to use later.

Now we define a constructor function and a create_deck function so that we actually have a deck to work with. The create_deck function uses a nested loop to create a unique tuple for each suit + rank combination:

    def __init__(self):
        self.__cards = []
        self.create_deck()

    def create_deck(self):
        for suit in self.SUITS:
            for rank in self.RANKS:
                new_card = (rank, suit)
                self.__cards.append(new_card)
Enter fullscreen mode Exit fullscreen mode

Now that we have our deck and it is stored in the private __cards instance variable, we can create a function to shuffle the deck just like in real poker. This makes use of the random.shuffle() method to shuffle the list of cards in place.

    def shuffle_deck(self):
        random.shuffle(self.__cards)
Enter fullscreen mode Exit fullscreen mode

Last, all we need to do is deal a card to begin playing. For this we check if there are any cards left in the deck, and if there are we pick the top card. The top card will be random because it was shuffled, just like in real poker:

    def deal_card(self):
        if (len(self.__cards) == 0):
            return None
        else:
            top_card = self.__cards.pop(0)
            return top_card
Enter fullscreen mode Exit fullscreen mode

This was a fun demonstration of the power of object-oriented programming because it makes use of the class to perform all of the behavior and store all of the data necessary for a simple poker deck.

Unlike functional programming which attempts to make programs which are more transparent and predictable with simple in-out relationships to data, class-based OOP relies on the ability to store both data and methods on a class to accomplish a wide array of tasks.

If you like projects like this and want to stay up to date with more, check out my Twitter @stonestwebdev, I follow back! See you tomorrow for another project.

Top comments (1)

Collapse
 
krystaltate profile image
KrystalTate • Edited

Sounds like a fun way to learn Python! 🐍 Playing Poker with Python using OOP sounds intriguing. I'm always up for expanding my coding skills. If you want to delve deeper into Python or explore other interesting coding projects, you can Read More Here. Happy coding! 👩‍💻🃏