在不使用if-else的情况下实现ceil功能

Ank*_*kan 2 python algorithm ceil

我只是想知道有没有一种方法可以在不使用if-else的情况下实现ceil功能?使用if-else (for a/b)可以实现为:

if a%b == 0:
    return(a/b)
else:
    return(a//b + 1)
Run Code Online (Sandbox Code Playgroud)

sim*_*rsh 7

最简单的是.

a//b + bool(a%b)
Run Code Online (Sandbox Code Playgroud)

为了安全起见,

b and (a//b + bool(a%b))
Run Code Online (Sandbox Code Playgroud)

干杯.


sas*_*llo 6

如果它们是整数,这样应该可以工作(我猜你有一个有理数表示):

a/b + (a%b!=0)
Run Code Online (Sandbox Code Playgroud)

否则,替换a/bint(a/b),或者更好,如下所示a//b


bea*_*res 6

-(-a//b)
Run Code Online (Sandbox Code Playgroud)

也许是最简单的?

=======================

*根据@Gilles 的评论编辑:

对于整数 n,

floor(x)=n for x in [n, n+1)
ceil(y)=n+1 for y in (n, n+1]
Run Code Online (Sandbox Code Playgroud)

所以,floor(-y)=-n-1 for -y in [-n-1, -n)

ceil(y)=-floor(-y)=n+1 for y in (n, n+1]

在 Python 中,floor(a/b) = a//b. 因此ceil(a/b) = -(-a//b)

  • 仅当“简单”意味着简洁但难以理解时...... (2认同)