2015-05-05 2 views
2

Я начинающий на питоне и написал код, чтобы проверить, является ли число кубом целого числа. Кажется, что код работает нормально для некоторых значений, однако для некоторых (даже целых кубов) он печатает корень куба как (x-0.000000004, x - это кубический корень). Например, он даст 3.9999999996 в качестве кубического корня 64, но будет печатать 2,5 для 8,125. Есть предположения?Проверка, является ли число целым кубом

n=int(input("Please enter the number: ")) 
print (n) 
x=n**(1/3) 
print (x) 
if x==int(x): 
    print ('%s is a whole cube'%(n)) 
else: 
    print ('%s is not a whole cube'%(n)) 

Игнорировать промежуточные операторы печати, они предназначены только для линейной отладки.

+4

Настоятельно рекомендуется прочитать [Ошибка округления по Python с номерами с плавающей запятой] (http://stackoverflow.com/questions/5997027/python-rounding-error-with-float-numbers) –

+0

Это один из наиболее часто задаваемых вопросов. Пожалуйста, прочитайте несколько тем о точности с плавающей запятой. Например, упомянутый Бхаргав Рао. – tamasgal

+0

Извините за повторение ребят. будет проверять документы python, спасибо. – pythonnewbie

ответ

4

Вы проверяете неправильное состояние, сравнивая значение float для равенства, можете легко дать вам кошмары. Проверьте, что такое python docs have to say on this.

Вместо этого вокруг корня, преобразовать его в междунар, а затем сравнить куб этого целое с оригинальным номером:

n = int(input("Please enter the number: ")) 
print (n) 
x = n**(1/3) 
x = int(round(x)) 
if x**3 == n: 
    print ('%s is a whole cube'%(n)) 
else: 
    print ('%s is not a whole cube'%(n)) 

Как указано на @StevenRumbalski в комментариях, в Python3, x = int(round(x)) может быть написанное как round(x) с roundint.

+1

В Python 3 'round' возвращает целое число при вызове с одним аргументом, поэтому, если OP использует Python 3, он может пропустить приведение к' int'. –

+0

@StevenRumbalski Спасибо, что указали, что :) –

+0

Вы также можете пропустить 'round()'. 'int (3.7)' is '3'. Таким образом, можно использовать условие 'if int (n ** (1.0/3)) ** 3 == n'. Я думаю, что это работает как на Python 2, так и на 3. –

Смежные вопросы