Program of Birthday Paradox in Python

Birthday Paradox coded in Python. This is for mid-level programmers who have the basic knowledge of the element used in this Python program. We have run here Monte Carlo simulation.

Theory : Program of Birthday Paradox in Python

This is not a Paradox it is only a surprising result of probability. We have here chosen random numbers as birthday and we are founding their is very much high probability of two person having a birthday on same date. We have used here Monte Carlo simulation of 100000 times and find out whether two person have the same birthday in simulation of n persons and we are seeing a very high probability of it happening.

Source code : Program of Birthday Paradox in Python

import datetime, random


def inputBirthdays(noOfBirthdays):
    
    birthdays = []
    for i in range(noOfBirthdays):
 # The year is unimportant for us birthday date  only important and the birthdays keep on repeating every year.
        startOfYear = datetime.date(2001, 1, 1)

 # inputing random day from random function in any year
        randomNoOfDays = datetime.timedelta(random.randint(0, 364))
        birthday = startOfYear + randomNoOfDays
        birthdays.append(birthday)
    return birthdays


def Compare(birthdays):
    """This function will return the birthday which has appeared more than once """
    if len(birthdays) == len(set(birthdays)):
        return None #Birthday are uique so None is returned.

 # Each birthday is compared to anoter birthday 
    for a, birthdayA in enumerate(birthdays):
        for b, birthdayB in enumerate(birthdays[a + 1 :]):
            if birthdayA == birthdayB:
                return birthdayA # Matched birthday is returned.


 # Display the intro:
print('''Birthday Paradox, by Archit architgulia@gamil.com

 The Birthday Paradox is that n random people have very high probalbility 
 of occurence  of  same birthday date .
 In this program monte carlo simpulation is used to check whether the random 
probability is so high.

This is not a paradox but a surprising result
 ''')

 # Setting up a tuple of monthly date 
Months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')

while True: # keep on asking till the user gives correct input
    print('How many birthdays shall I generate? (Max 100)')
    response = input('> ')
    if response.isdecimal() and (0 < int(response) <= 100):
        numBDays = int(response)
        break # User has entered a valid amount.
print()

 # Generating and displaying Birthaday 
print('Here are', numBDays, 'birthdays:')
birthdays = inputBirthdays(numBDays)
for i, birthday in enumerate(birthdays):
    if i != 0:
        # Displaying a comma after first birthday and every birthday
        print(', ', end='')
    monthName = Months[birthday.month - 1]
    dateText = '{} {}'.format(monthName, birthday.day)
    print(dateText, end='')
print()
print()

# To determine if two birthdays match
match = Compare(birthdays)

 # Displaying the result
print('In  Simulation, ', end='')
if match != None:
    monthName = Months[match.month - 1]
    dateText = '{} {}'.format(monthName, match.day)
    print('multiple people having  a birthday on', dateText)
else:
    print('there is no matched birthdays.')
print()

# Running 100,000 simulations:
print('Processing', numBDays, 'random birthdays 100,000 times...')
input('Press Enter to start...')
print('Let run another 100,000 simulations.')
birthmatch = 0 # How many simulations has matching birthdays in them.
for i in range(100_000):
    # Reporting on the progress after every 10,000 simulation
    if i % 10_000 == 0:
        print(i, 'simulations run...')
    birthdays = inputBirthdays(numBDays)
    if Compare(birthdays) != None:
        birthmatch = birthmatch + 1
print('Processed 100,000 simulations run.')
 # Displaying simulation results:
probability = round(birthmatch / 100_000 * 100, 2)
print('Out of processed of 100,000 simulations of', numBDays, 'people, there are a')
print('matched birthdays in the group', birthmatch, 'in times. That means')
print('that is ', numBDays, 'people have a', probability , '% chance of to')
print('having a matched birthday in  group.')
print('That is much number of time than thought!')

Output :

RESTART: C:/Users/ARCHIT/Desktop/new python progrm/editedbirthday paradox.py

Birthday Paradox, by Archit architgulia@gamil.com

 The Birthday Paradox is that n random people have very high probalbility

 of occurence  of  same birthday date .

 In this program monte carlo simpulation is used to check whether the random

probability is so high.

This is not a paradox but a surprising result

How many birthdays shall I generate? (Max 100)

> 27

Here are 27 birthdays:

Jun 15, Jul 16, Feb 17, Oct 12, Oct 1, Sep 6, Apr 16, Aug 24, Mar 28, Dec 2, Oct 6, Dec 18, Jan 18, Oct 31, May 2, Aug 1, Oct 12, Oct 4, Dec 28, Dec 20, Sep 15, Mar 13, Apr 9, Nov 20, Sep 14, Mar 17, Dec 9

In  Simulation, multiple people having  a birthday on Oct 12

Processing 27 random birthdays 100,000 times…

Press Enter to start…

Let run another 100,000 simulations.

0 simulations run…

10000 simulations run…

20000 simulations run…

30000 simulations run…

40000 simulations run…

50000 simulations run…

60000 simulations run…

70000 simulations run…

80000 simulations run…

90000 simulations run…

Processed 100,000 simulations run.

Out of processed of 100,000 simulations of 27 people, there are a

matched birthdays in the group 62795 in times. That means

that is  27 people have a 62.8 % chance of to

having a matched birthday in  group.

That is much number of time than thought!

>>> 

Conclusion:

The program is running fine.

Program of Birthday Paradox coded in Python. This is for mid-level programmers who have the basic knowledge of the element used in this program. For more programs click below:
Python Programs Archives – CS Study

Leave a Comment

Your email address will not be published. Required fields are marked *