Python:确定数字是方形,立方体等的函数

Fab*_*hn. 3 python algorithm math function division

我的一个简单问题是创建一个函数来确定是否可以a^n为某些给定的n 写入数字N ,即我需要检查是否N^(1/n)是整数.不知何故,此函数产生错误的结果:

def is_power(N, n):
    r = float(N) ** ( 1. / float(n) )
    return r.is_integer()
Run Code Online (Sandbox Code Playgroud)

因为n=2它有效.

对于n=3和N = 1,8,27,函数产生True,这是正确的.但是从那时起就是假的,例如为4*4*4=645*5*5=125.如何创建一个找到正方形/立方体/等数字的工作函数?

Ror*_*ton 6

浮点运算不精确 - 请参阅浮点数学是否已损坏?.

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

def is_power(N, n):
    r = round(N ** (1.0 / n))
    return r**n == N
Run Code Online (Sandbox Code Playgroud)