代码之家  ›  专栏  ›  技术社区  ›  Fabian Schn.

Python:用于确定数字是否为正方形、立方体等的函数

  •  3
  • Fabian Schn.  · 技术社区  · 7 年前

    我的简单问题是创建一个函数,确定数字N是否可以写成 a^n 对于某些给定的n,即我需要检查 N^(1/n) 是一个整数。不知怎的,这个函数产生了错误的结果:

    def is_power(N, n):
        r = float(N) ** ( 1. / float(n) )
        return r.is_integer()
    

    对于 n=2

    n=3 N=1,8,27,函数得到True,这是正确的。但从那时起为False,例如 4*4*4=64 5*5*5=125 .我如何创建一个工作函数来查找正方形/立方体等数字。?

    1 回复  |  直到 7 年前
        1
  •  7
  •   Rory Daulton    7 年前

    浮点运算不精确--请参阅 Is floating point math broken?

    r 精确到最接近的整数,然后查看功率是否有效。这段Python 3代码删除了一些冗余类型转换。对于Python 2,包装计算 变成一个 int() 类型转换(Python 3不需要)。

    def is_power(N, n):
        r = round(N ** (1.0 / n))
        return r**n == N