问题描述
这是我发现的最佳方法:
Here is how, this is the best way, I have found:
x = int(raw_input("Enter an integer: "))
for ans in range(0, abs(x) + 1):
if ans ** 3 == abs(x):
break
if ans ** 3 != abs(x):
print x, 'is not a perfect cube!'
else:
if x < 0:
ans = -ans
print 'Cube root of ' + str(x) + ' is ' + str(ans)
有没有更好的方法,最好是避免迭代候选值的方法?
Is there a better way, preferably one that avoids having to iterate over candidate values?
推荐答案
您可以使用 x ** (1./3)
来计算 的(浮点)立方根x
.
You could use x ** (1. / 3)
to compute the (floating-point) cube root of x
.
这里的微妙之处在于,这对于 Python 2 和 3 中的负数的工作方式不同.但是,以下代码处理了这个问题:
The slight subtlety here is that this works differently for negative numbers in Python 2 and 3. The following code, however, handles that:
def is_perfect_cube(x):
x = abs(x)
return int(round(x ** (1. / 3))) ** 3 == x
print(is_perfect_cube(63))
print(is_perfect_cube(64))
print(is_perfect_cube(65))
print(is_perfect_cube(-63))
print(is_perfect_cube(-64))
print(is_perfect_cube(-65))
print(is_perfect_cube(2146689000)) # no other currently posted solution
# handles this correctly
取x
的立方根,四舍五入到最接近的整数,求三次方,最后检查结果是否等于x
.
This takes the cube root of x
, rounds it to the nearest integer, raises to the third power, and finally checks whether the result equals x
.
采用绝对值的原因是为了使代码能够正确处理 Python 版本中的负数(Python 2 和 3 将负数提升为分数幂的处理方式不同).
The reason to take the absolute value is to make the code work correctly for negative numbers across Python versions (Python 2 and 3 treat raising negative numbers to fractional powers differently).
这篇关于如何使用Python找到立方根?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!