Python:判断数字是否为正方形、立方体等的函数

Python: Function to determine if number is square, cube, etc

我的简单问题是创建一个函数,确定对于给定的 n,数字 N 是否可以写为 a^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=645*5*5=125。如何创建一个工作函数来查找 squares/cubes/etc. 的数字?

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

因此请使用精确整数数学检查您的答案。将 r 舍入到最接近的整数,然后查看电源是否有效。此 Python 3 代码删除了一些多余的类型转换。对于 Python 2,将 r 的计算包装到 int() 类型转换中(Python 3 不需要)。

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