Flipping a Coin in Python

Mansoor Aldosari
1 min readFeb 13, 2022

--

Photo by Andriyko Podilnyk on Unsplash

There are many ways to create a coin flipper, but there is an elegant way, using the singleton design pattern. In brief, singletons mean that you instantiate a single object from a class at one time, in this case, its heads or tails.

Setup:

from enum import Enum, auto
import random

Enum: is our data type.
Auto: assign value starting from 1.
Random: is a pseudo-random number generator.

Create a coin:

class Coin(Enum):
heads = auto()
tails = auto()
list(Coin) #=> [<Coin.heads: 1>, <Coin.tails: 2>]

The class coin has two variables (heads and tails).
Heads have the value 1, while tails have the value 2.

Creating the Flip Function:

def flip() -> Coin:
return random.choice(list(Coin))
flip() #=> <Coin.heads: 1>

The function flip utilizes the choice method from the random library.
Create a list of flips.

Runtime:

heads_list = [flip() for _ in range(1000)]
heads_list.count(Coin.heads) #=> 514
heads_list.count(Coin.tails) #=> 486

Using a comprehension list of 1000 flips.
We get the following count; the values are almost 50–50 because the choice function produces a uniform distribution (where each value is equally likely to be picked).

Use enum to create a singleton when you have a list of defined constants, and you want to draw a single object.

--

--