Написать функцию, которая будет считать количество дней после тренировок, помогите разобраться, такую задачу я уже находил

Вы ходите в тренажёрный зал по определённым дням, например вторникам, четвергам, субботам. Известно сегодняшнее число, и сколько тренировок вы хотите посетить, надо найти, сколько пройдёт календарных дней после посещения этого количества тренировок. Например сегодня понедельник 18 апреля 2016 года, вы ходите в зал по вторникам, четвергам и субботам, хотим узнать, сколько дней пройдёт после посещения шести тренировок. В результате должно получиться 13 дней (тренировки 19, 21, 23, 26, 28 и 30 апреля).

Я нашел похожий вопрос, но там пользователь, написал следующую формулу, которая работает не понятно... https://ru.stackoverflow.com/questions/657459/%d0%9d%d0%b0%d0%bf%d0%b8%d1%81%d0%b0%d1%82%d1%8c-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8e-%d0%ba%d0%be%d1%82%d0%be%d1%80%d0%b0%d1%8f-%d0%b1%d1%83%d0%b4%d0%b5%d1%82-%d1%81%d1%87%d0%b8%d1%82%d0%b0%d1%82%d1%8c-%d0%ba%d0%be%d0%bb%d0%b8%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be-%d0%b4%d0%bd%d0%b5%d0%b9-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%82%d1%80%d0%b5%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%be%d0%ba

Пример:

10 тренировок | 3 раза в неделю (пн, ср, пт) | сегодня среда >следовательно (10 - 2) / 3 = 8 / 3 = 2.1 => 2 полных недели + 1 тренька

Как у вас получается что 8 поделить на 3 получается 2.1? Как бы я не считал это, получается 2.666. Просто тогда вся ваша логика ломается. Был бы благодарен за ответ)


Ответы (1 шт):

Автор решения: MBo

Для K тренировок в неделю, N тренировок всего считаете W=N/K (целочисленно) и T=N%K.

Затем считаете дни до ближайшей тренировки

D = 0
DayofWeek = Today
while not DayofWeek in TrainingDays:
    D++
    DayofWeek = (DayofWeek + 1) % 7

Потом увеличиваете результат на 7 * W (пройдёт W целых недель)

Потом идёте таким же образом по дням недели, пока количество тренировок в них не достигнет Т

TT = 0
while TT < T:
   D++
   if DayofWeek in TrainingDays:
       TT++    
   DayofWeek = (DayofWeek + 1) % 7
→ Ссылка