Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2022 13:25:00

dendonnar
Зарегистрирован: 2021-10-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Лотерея data time ошибка при 10000+ лет

Здравствуйте!
Написал программу, которая предлагает выбрать 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]

Офлайн

#2 Янв. 6, 2022 13:44:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Лотерея data time ошибка при 10000+ лет

dendonnar
Зачем вам вообще модуль datetime для столь простой арифметики? У вас есть количество дней. Поделите их на 365 - вуаля, количество лет.
Ну и у меня такое чувство, что вы задачу в принципе неправильно решаете. Насколько я понял, вам нужно вычислить количество итерраций цикла для достижения некоторой комбинации методом перебора. И вы… перебираете. Это комбинаторика, вам надо не перебирать, вам надо посчитать по формуле. Ваша программа может вообще не завершится за время существования Вселенной - будет перебирать комбинации.



Офлайн

#3 Янв. 6, 2022 15:19:55

dendonnar
Зарегистрирован: 2021-10-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Лотерея data time ошибка при 10000+ лет

Нет, я решил все как было поставлено в задаче и комбинаторику не трогаем. Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней) и вот как это посчитать на пару сотен тысячь дней? Вот для этого и импортировал datetime
Надеюсь все понятно описал

Заранее спасибо!

Офлайн

#4 Янв. 6, 2022 15:32:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Лотерея data time ошибка при 10000+ лет

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

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

да делайте вы что хотите
Одного не понимаю, нафига вы вопросы задаете, если сами лучше знаете?



Отредактировано FishHook (Янв. 6, 2022 16:02:19)

Офлайн

#5 Янв. 6, 2022 16:09:22

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Лотерея data time ошибка при 10000+ лет

dendonnar
Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней)
возьмите среднее количество суток 365,2425

Отредактировано xam1816 (Янв. 6, 2022 16:09:45)

Офлайн

#6 Янв. 7, 2022 00:26:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Лотерея data time ошибка при 10000+ лет

dendonnar
Только вы не учли одно но, существуют високосные года (те в которых не 365, а 366 дней)
Так эти годы существуют в календаре, а не фактически. Фактический год - это оборот планеты вокруг её звезды. Так он ещё может и неконстантным быть, так как зависит от массы звезды и массы планеты. Так что бери вещественное значение (сколько суток в годе такой-то планеты в такой-то звёздной системе), дели на него, а потом округляй до целого.
Понятие високосного года придумали для выравнивания календаря, который как раз и не учитывает точное количество суток в годе.



Отредактировано py.user.next (Янв. 10, 2022 22:47:17)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version