Написать функцию, которая будет считать количество дней после тренировок, помогите разобраться, такую задачу я уже находил
Вы ходите в тренажёрный зал по определённым дням, например вторникам, четвергам, субботам. Известно сегодняшнее число, и сколько тренировок вы хотите посетить, надо найти, сколько пройдёт календарных дней после посещения этого количества тренировок. Например сегодня понедельник 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 шт):
Для 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