检查一个完美的立方体
问题描述:
所以我必须做一个代码来检查一个数字是否是一个完美的立方体,但由于某种原因,任何大于27的立方体,它说它的根是x.99999999。 (即它返回64 **(1/3)作为3.9999 & 125 **(1/3)作为4.9999)。检查一个完美的立方体
n = int(input("What number would you like to check if it is a cube?"))
def is_cube(n):
guess = n**(1.0/3.0)
if (guess)%1 == 0:
print(True, "it's cubed root is", guess)
else:
print(False, "it's cubed root is", guess)
is_cube(n)
答
只是转换为integer
与round
和检查integer
cubed
是否是input
(n
)。
def is_cube(n):
cube_root = n**(1./3.)
if round(cube_root) ** 3 == n:
print(True, "its cubed root is", round(cube_root))
else:
print(False, "its cubed root is", cube_root)
和一些测试:
>>> is_cube(12)
False its cubed root is 2.2894284851066637
>>> is_cube(34)
False its cubed root is 3.239611801277483
>>> is_cube(27)
True its cubed root is 3
>>> is_cube(64)
True its cubed root is 4
哦,顺便说一句,的its
的所有格形式并不需要撇号。你的代码不对。
答
一旦开始使用浮点运算,您需要认识到无限精度不可用。通常情况下,考虑到可用于存储信息的有限位数,浮点值实际上只是最好的近似值。
对于这种特殊情况,您可能会发现您可以只取立方体根部的整数值,并检查它是否为立方体给出原始值。
像这样的东西应该是一个良好的开端:
def is_cube(n):
guess = n**(1.0/3.0)
iguess = int(guess)
if iguess * iguess * iguess == n:
print(True, "it's cubed root is", iguess)
return
iguess = iguess + 1
if iguess * iguess * iguess == n:
print(True, "it's cubed root is", iguess)
return
print(False, "it's cubed root is", guess)
浮点数不精确:https://docs.python.org/3/tutorial/floatingpoint.html查看使用十进制模块:https://docs.python.org/3/library/decimal.html#模块十进制 –