【问题标题】:Ceil and floor equivalent in Python 3 without Math module?没有数学模块的Python 3中的天花板和地板等效?
【发布时间】: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 的上限。不信就试试吧! (好吧,所以你可以不带前导 -- 拼写它,但它看起来更好。)

标签: python python-3.x


【解决方案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.0True4.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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多