diff --git a/Парадокс ДР/main.py b/Парадокс ДР/main.py index 7a2aaf9..eba75a6 100644 --- a/Парадокс ДР/main.py +++ b/Парадокс ДР/main.py @@ -1,80 +1,79 @@ import random import datetime -from string import digits -matchs = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', +motchs = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec') - def getBarthday(inp): + date = datetime.date(2000, 1, 1) 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 + for i in range(1, int(inp) + 1): + rand_day = datetime.timedelta(random.randint(1, 364)) + rand_date = date + rand_day dates.append(rand_date) return dates +def sameDate(dates): + if len(dates) == len(set(dates)): + return None + for a, barthdeyA in enumerate(dates): + for b, barthdeyB in enumerate(dates[a + 1:]): + if barthdeyA == barthdeyB: + return barthdeyA - - - -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: +def getMonth(dates): + for i, date in enumerate(dates): + if i != 0: print(', ', end='') - barthday = matchs[date.month - 1] - print(f"{barthday} {date.day}", end='') + motch = motchs[date.month - 1] + print(f"{motch} {date.day}", end='') -def sameMath(list_date): - - if len(list_date) == len(set(list_date)): - print("\nNo such same birthday") +def sameMonth(dates): + date = sameDate(dates) + if date != None: + same_date = motchs[date.month - 1] + print(f"\nSame a {same_date} {date.day}") else: - same_math = getMatch(list_date) - barthday = matchs[same_math.month - 1] - print(f"\nRepeat date {barthday} {same_math.day}") + print("Nohing same") -def simulations(inp): +def simualtion(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: + sam_date = sameDate(dates) + if i % 10_000 == 0 and i != 0: + print(f"Simulations {i}") + if sam_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}") + chanse = round((digit/100_000) * 100, 2) + print(f"Same = {digit}") + print(f"Chanse = {chanse}") + def main(): while True: - print("Enter number no more than 100") inp = '' - while not inp.isdecimal() or 0 > int(inp) > 100: + while not inp.isdecimal() or int(inp) > 100: + print("Enter number no more than 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'): + dates = getBarthday(inp) + getMonth(dates) + sameMonth(dates) + simualtion(inp) + print("You want play again?") + if not input("(yes/no)> ").startswith('y'): print("Thanks for playing") break - if __name__ == '__main__': main() + + + + + + +