没有数学模块的Python 3中的天花板和地板等效?
Posted
技术标签:
【中文标题】没有数学模块的Python 3中的天花板和地板等效?【英文标题】:Ceil and floor equivalent in Python 3 without Math module? 【发布时间】:2015-09-14 06:56:08 【问题描述】:我需要在不使用 import math
的情况下对 3/2 结果 (1.5) 进行上限和下限。
math.floor(3/2)
=> 3//2
math.ceil(3/2)
=> ?
好的,问题来了: 将所有数字相加 15 + 45 + 15 + 45 + 15 ... 有 N 个项目。
sum = (n//2) * 5 + int(n/2) * 15
【问题讨论】:
4/2 的结果错误 为什么不直接使用math
库?
用于教育目的
相信我,我试过了。顺便说一句,我以前用过 php,现在我正在学习 Python :)
使用天花板除法运算符,--0--
!这将地板除法转换为天花板除法。例如,--0-- 3//2
给出了3/2
的上限。不信就试试吧! (好吧,所以你可以不带前导 --
拼写它,但它看起来更好。)
【参考方案1】:
>>> 3/2
1.5
>>> 3//2 # floor
1
>>> -(-3//2) # ceil
2
【讨论】:
有趣的是>>>math.ceil(4.0000000000000001/2)
是 2,但 >>>math.ceil(4.000000000000001/2)
是 3
但并不奇怪,当您认为 4.0000000000000001 == 4.0
是 True
但 4.000000000000001 == 4.0
是 False 时【参考方案2】:
试试
def ceil(n):
return int(-1 * n // 1 * -1)
def floor(n):
return int(n // 1)
我使用 int() 将值设为整数。由于天花板和地板是一种舍入类型,我认为整数是返回的合适类型。
整数除法 //,转到数轴左侧的下一个整数。因此,通过使用-1,我切换方向以获得天花板,然后使用另一个* -1返回到原来的标志。数学是从左到右完成的。
【讨论】:
【参考方案3】:试试:
def ceil(n):
res = int(n)
return res if res == n or n < 0 else res+1
def floor(n):
res = int(n)
return res if res == n or n >= 0 else res-1
【讨论】:
这个floor
的定义被破坏了:它对于负整数不能正常工作。【参考方案4】:
试试看:
if a%b != 0:
print(int(a//b + 1))
else:
print(int(a/b))
【讨论】:
以上是关于没有数学模块的Python 3中的天花板和地板等效?的主要内容,如果未能解决你的问题,请参考以下文章