Использование допуска к ошибкам даст вам неправильные результаты для больших чисел. Например, 10 12 - 1 - это не куб, но (10**12 - 1) ** (1/3)
- это 9999.999999996662
, который пройдет ваш тест.
Более безопасный способ сделать это - округлить его до целое число, затем проверьте, имеет ли он правильный куб:
def is_cube(x):
y = x ** (1/3)
y = int(round(y))
if y ** 3 == x:
print('Integer')
else:
print('Not integer')
Примеры:
>>> is_cube(27)
Integer
>>> is_cube(28)
Not integer
>>> is_cube(10**12)
Integer
>>> is_cube(10**12 - 1)
Not integer
Однако обратите внимание, что это не будет работать для очень большого числа, поскольку x ** (1/3)
выполняется с использованием чисел с плавающей запятой, поэтому ошибка может быть больше 0,5, и в этом случае округление даст неправильный результат. Например, приведенный выше код не работает для ввода 10 ** 45
.