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=64
或 5*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
我的简单问题是创建一个函数,确定对于给定的 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=64
或 5*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