2017-11-11 22 views
0

数字が完璧な立方体かどうかをチェックするコードを作る必要がありますが、何らかの理由で27を超える立方体があるとすれば、その根はx.99999999です。 (つまり、3.9999 & 125 **(1/3)を4.9999として64 **(1/3)を返します。完璧な立方体を確認する

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 10進数モジュールを使用してください。https://docs.python.org/3/library/decimal.html#モジュール小数点 –

答えて

1

だけroundintegerに変換し、そのintegercubedinputn)であるかどうかを確認してください。

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) 
関連する問題