Найти - Пользователи
Полная версия: Лотерея data time ошибка при 10000+ лет
Начало » Python для экспертов » Лотерея data time ошибка при 10000+ лет
1
dendonnar
Здравствуйте!
Написал программу, которая предлагает выбрать 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]
FishHook
dendonnar
Зачем вам вообще модуль datetime для столь простой арифметики? У вас есть количество дней. Поделите их на 365 - вуаля, количество лет.
Ну и у меня такое чувство, что вы задачу в принципе неправильно решаете. Насколько я понял, вам нужно вычислить количество итерраций цикла для достижения некоторой комбинации методом перебора. И вы… перебираете. Это комбинаторика, вам надо не перебирать, вам надо посчитать по формуле. Ваша программа может вообще не завершится за время существования Вселенной - будет перебирать комбинации.
dendonnar
Нет, я решил все как было поставлено в задаче и комбинаторику не трогаем. Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней) и вот как это посчитать на пару сотен тысячь дней? Вот для этого и импортировал datetime
Надеюсь все понятно описал

Заранее спасибо!
FishHook
dendonnar
Только вы не учли одно но, существуют високосные года
Кто вам сказал, что нужно это учитывать? Вам надо выяснить склько лет длится процесс. Если вы используете календарь, то в зависимости от того, в какой конкретно день начнутся расчеты, вы получите разные результаты. Что лишено смысла. Не понимаете? А если в месяцах надо будет померить? Есть условный месяц = 30 дней, есть год = 365 дней. В этих единицах измеряют длительность. Если задача будет сформулирована таким образом “В какой календарный день закончатся расчеты, если их начать в 10:00 20-го мая 1936-го года”, тогда нам нужен будет календарь.

dendonnar
я решил все как было поставлено в задаче и комбинаторику не трогаем

да делайте вы что хотите
Одного не понимаю, нафига вы вопросы задаете, если сами лучше знаете?
xam1816
dendonnar
Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней)
возьмите среднее количество суток 365,2425
py.user.next
dendonnar
Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней)
Так эти годы существуют в календаре, а не фактически. Фактический год - это оборот планеты вокруг её звезды. Так он ещё может и неконстантным быть, так как зависит от массы звезды и массы планеты. Так что бери вещественное значение (сколько суток в годе такой-то планеты в такой-то звёздной системе), дели на него, а потом округляй до целого.
Понятие високосного года придумали для выравнивания календаря, который как раз и не учитывает точное количество суток в годе.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB