В Python используйте //
(целочисленное деление по полу, введено в Python 2.2) и принудительно округляйте его:
number_required = y * z
container_holds = x
reqd_containers = (number_required + container_holds - 1) // container_holds
или, если вам нужна так называемая версия "профессионального программиста", вместо этогопояснительной версии:
n=(y*z+(x-1))//x;
или, если вы действительно боитесь синдрома запястного канала, порежьте две лишние скобки и точку с запятой:
n=(y*z+x-1)//x
Примечание: это решениеработает как на Python 2 (где 10 / 3 -> 3
), так и на Python 3 (где 10 / 3 -> 3.3333333333333335
)
Другие «решения» не только используют ненужные вызовы функций, но и терпят неудачу с большими числами:
# wrong in Python 3; works with Python 2.3 to 2.7
# int overflow with Pythons up to 2.2
>>> int((100000000000000000 + 2)/3)
33333333333333332 # last digit should be 4
# wrong with Python 2.3 onwards; int overflow with earlier versions
>>> import math
>>> int(math.ceil(float(100000000000000000) / 3))
33333333333333332L