import random import datetime from string import digits matchs = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec') def getBarthday(inp): dates = [] for i in range(1, int(inp) + 1): data = datetime.date(2000, 1, 1) rand_days = datetime.timedelta(random.randint(1, 364)) rand_date = data + rand_days dates.append(rand_date) return dates def getMatch(list_date): for a, barthdayA in enumerate(list_date): for b, barthdayB in enumerate(list_date[a + 1:]): if barthdayA == barthdayB: return barthdayB def numMatch(inp): dates = getBarthday(inp) for a, date in enumerate(dates): if a != 0: print(', ', end='') barthday = matchs[date.month - 1] print(f"{barthday} {date.day}", end='') def sameMath(list_date): if len(list_date) == len(set(list_date)): print("\nNo such same birthday") else: same_math = getMatch(list_date) barthday = matchs[same_math.month - 1] print(f"\nRepeat date {barthday} {same_math.day}") def simulations(inp): digit = 0 for i in range(100_000): dates = getBarthday(inp) same_date = getMatch(dates) if i % 10_000 == 0: print(f"{i} simulations...") if same_date != None: digit += 1 number = round((digit / 100_000) * 100, 2) print(f"Number same barthday = {digit}\n") print(f"And chance same birhday = {number}") def main(): while True: print("Enter number no more than 100") inp = '' while not inp.isdecimal() or 0 > int(inp) > 100: inp = input("> ") list_date = getBarthday(inp) numMatch(inp) sameMath(list_date) simulations(inp) print("You want repeat?") resp = input("(yes or no)> ") if not resp.lower().startswith('y'): print("Thanks for playing") break if __name__ == '__main__': main()