2017-11-11 72 views
0

所以我必須做一個代碼來檢查一個數字是否是一個完美的立方體,但由於某種原因,任何大於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) 
+1

浮點數不精確:https://docs.python.org/3/tutorial/floatingpoint.html查看使用十進制模塊:https://docs.python.org/3/library/decimal.html#模塊十進制 –

回答

1

只是轉換爲integerround和檢查integercubed是否是inputn)。

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的所有格形式並不需要撇號。你的代碼不對。

0

一旦開始使用浮點運算,您需要認識到無限精度不可用。通常情況下,考慮到可用於存儲信息的有限位數,浮點值實際上只是最好的近似值。

對於這種特殊情況,您可能會發現您可以只取立方體根部的整數值,並檢查它是否爲立方體給出原始值。

像這樣的東西應該是一個良好的開端:

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) 
相關問題