#python-2.7
#python-2.7
Вопрос:
Возможно ли найти наименьшую кратность k, большую или равную n, без оператора if?, другими словами, наименьшее число, делимое на k, большее или равное n.
Я ищу выражение без условия (также без тройного оператора и так далее).
Например,
n = 78, k = 10 -----> 80
n = 80, k =10 -------> 80
n = 13, k = 3 -------> 15
n = 14, k =2 ----> 14
n=13, k = 11 ----> 22
Комментарии:
1. Почему ? это домашнее задание?
Ответ №1:
Это может сделать трюк
x = ((n // k) (n % k != 0)) * k
Ответ №2:
Злоупотребление тем фактом, что bool
может быть преобразовано в int
:
tests = [(78, 10), (80, 10), (13, 3), (14, 2), (13, 11)]
for n, k in tests:
print([n, n - n % k k][int(bool(n % k))])
выводит
80
80
15
14
22
Объяснение
[n, n - n % k k]
просто создает список. «Хитрость» заключается в используемой нами индексации: если n % k
0
это означает, что мы хотим выбрать n
. В противном случае int(bool(n % k))
станет 1
, какие средства n - n % k k
будут выбраны.