Вдохновленный ответом Жмых ответом, который
q, r = divmod(total, surplus)
skip = q + int(bool(r)) # rounds to next greater integer (always ceiling)
, я пришел к следующему решению:
q, r = divmod(total, surplus)
skip = q + int(2 * r >= surplus) # rounds to nearest integer (floor or ceiling)
Поскольку ОП запросил округлениедо ближайшего целого числа, решение zhmhs на самом деле немного неверно, потому что оно всегда округляется до следующего следующего большего целого числа, в то время как мое решение работает так, как требуется.
(Если вы считаете, что мой ответ должен был быть редактированием или комментарием к ответу zhmh, позвольте мне указать, что мое предлагаемое изменение для него было отклонено, поскольку это должен был быть комментарий,но у меня пока недостаточно репутации для комментирования!)
Если вам интересно, как определяется divmod
: в соответствии с документацией
Для целых чисел результат такой же, как (a // b, a % b)
.
Поэтому мы придерживаемся целочисленной арифметики, как того требует ОП.