71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
import datetime, random
|
|
|
|
|
|
def getBirthday(numberOfBerthday):
|
|
birthdays = []
|
|
for i in range(numberOfBerthday):
|
|
start_of_year = datetime.date(2000, 1, 1)
|
|
randomNumber_of_Days = datetime.timedelta(random.randint(1, 364))
|
|
birthday = start_of_year + randomNumber_of_Days
|
|
birthdays.append(birthday)
|
|
return birthdays
|
|
|
|
def getMatch(birthdays):
|
|
if len(birthdays) == len(set(birthdays)):
|
|
return None
|
|
|
|
for a, birthdayA in enumerate(birthdays):
|
|
for b, birthdayB in enumerate(birthdays[a + 1:]):
|
|
if birthdayA == birthdayB:
|
|
return birthdayA
|
|
|
|
# Создаем картеж
|
|
months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
|
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
|
|
|
|
while True:
|
|
"""Ввод пользователя"""
|
|
print("How many birthdays shall i generate? (Max 100)")
|
|
"""Добавь потом в сам цикл while"""
|
|
responses = input("> ")
|
|
if responses.isdecimal() and (0 < int(responses) <= 100):
|
|
numBDay = int(responses)
|
|
break
|
|
|
|
print("Here are ", responses, " birthdays:")
|
|
birthdays = getBirthday(numBDay)
|
|
for i ,birthday in enumerate(birthdays):
|
|
if i != 0:
|
|
print(', ', end='')
|
|
montName = months[birthday.month - 1]
|
|
dateText = f"{montName} {birthday.day}"
|
|
print(dateText, end='')
|
|
|
|
print()
|
|
match = getMatch(birthdays)
|
|
|
|
print("In this simulations, ", end='')
|
|
if match != None:
|
|
montName = months[match.month - 1]
|
|
dateText = f"{montName} {match.day}"
|
|
print(f'multiple peple have a birthday on {dateText}')
|
|
else:
|
|
print("There are no matching birthdays.")
|
|
|
|
print("Lets run anuther 100_000 simulater ")
|
|
|
|
simMatch = 0
|
|
for i in range(100_000):
|
|
if i % 10_000 == 0:
|
|
print(i , 'simulations run ...')
|
|
birthdays = getBirthday(numBDay)
|
|
if getMatch(birthdays) != None:
|
|
simMatch += 1
|
|
print("100_000 simulations run.")
|
|
|
|
probability = round((simMatch / 100_000) * 100, 2)
|
|
print(f"Out jf 100_000 simulations of {numBDay} peple, there was a\n"
|
|
f"matching birthday in tht group {simMatch} times. This means\n"
|
|
f"that {numBDay} peple have a {probability} % chanse jf\n"
|
|
"having a matching birthday in their group.\n")
|