Форум сайта python.su
Здравствуйте!
Написал программу, которая предлагает выбрать 6 уникальных чисел от 1 до 49(прям как лотерея). Затем программа начинает делать то же самое, а именно подбирать 6 уникальных чисел от 1 до 49 до тех пор, пока комбинация юзера != комбинация компа. Для ясности 12, 23, 11, 1, 45, 37 == 23, 11, 1, 45, 12, 37 (порядок не имеет значения). Суть такова, что мы как бы должны посчитать количество дней/лет, которое программе понадобится, чтобы комбинации были одинаковыми (1 попытка = 1 день).
Импортировал в код datetime, чтобы уменьшить код и не париться, но проблема в том что когда количество лет превышает 10000, то выбивает ошибочку:
Traceback (most recent call last):
File “C:\Users\Denys\Desktop\JiPP\Loteria.py”, line 17, in <module>
year_counter = datetime.datetime.now() + datetime.timedelta(days=days_counter)
OverflowError: date value out of range
И тут все понятно, что просто превышено количество дней ( в случае этой библиотеки 9999+ )
Вот код:
[code python]
import datetime
import random
days_counter = 0
choiced_user = list(map(int, input("Напиши 6 уникальных чисел от 1 до 49, разделив их пробелом:").split(' ')[:6]))
choiced_user.sort()
choiced_pc = ()
while choiced_pc != choiced_user:
choiced_pc = (random.sample(range(1, 50), 6))
choiced_pc.sort()
days_counter += 1
if choiced_pc == choiced_user:
year_counter = datetime.datetime.now() + datetime.timedelta(days=days_counter)
print(choiced_user)
print(choiced_pc)
print("Количество дней:", days_counter)
print("Ты бы выиграл в лотереи через:", year_counter, " лет")
[/code]
Офлайн
dendonnar
Зачем вам вообще модуль datetime для столь простой арифметики? У вас есть количество дней. Поделите их на 365 - вуаля, количество лет.
Ну и у меня такое чувство, что вы задачу в принципе неправильно решаете. Насколько я понял, вам нужно вычислить количество итерраций цикла для достижения некоторой комбинации методом перебора. И вы… перебираете. Это комбинаторика, вам надо не перебирать, вам надо посчитать по формуле. Ваша программа может вообще не завершится за время существования Вселенной - будет перебирать комбинации.
Офлайн
Нет, я решил все как было поставлено в задаче и комбинаторику не трогаем. Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней) и вот как это посчитать на пару сотен тысячь дней? Вот для этого и импортировал datetime
Надеюсь все понятно описал
Заранее спасибо!
Офлайн
dendonnarКто вам сказал, что нужно это учитывать? Вам надо выяснить склько лет длится процесс. Если вы используете календарь, то в зависимости от того, в какой конкретно день начнутся расчеты, вы получите разные результаты. Что лишено смысла. Не понимаете? А если в месяцах надо будет померить? Есть условный месяц = 30 дней, есть год = 365 дней. В этих единицах измеряют длительность. Если задача будет сформулирована таким образом “В какой календарный день закончатся расчеты, если их начать в 10:00 20-го мая 1936-го года”, тогда нам нужен будет календарь.
Только вы не учли одно но, существуют високосные года
dendonnar
я решил все как было поставлено в задаче и комбинаторику не трогаем
Отредактировано FishHook (Янв. 6, 2022 16:02:19)
Офлайн
dendonnarвозьмите среднее количество суток 365,2425
Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней)
Отредактировано xam1816 (Янв. 6, 2022 16:09:45)
Офлайн
dendonnarТак эти годы существуют в календаре, а не фактически. Фактический год - это оборот планеты вокруг её звезды. Так он ещё может и неконстантным быть, так как зависит от массы звезды и массы планеты. Так что бери вещественное значение (сколько суток в годе такой-то планеты в такой-то звёздной системе), дели на него, а потом округляй до целого.
Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней)
Отредактировано py.user.next (Янв. 10, 2022 22:47:17)
Офлайн