Python - Подстановочные знаки для целых значений? - PullRequest
3 голосов
/ 10 февраля 2020

Как мне сделать мой код вокруг любого значения, которое имеет десятичную точку x.999999999?

На данный момент у меня есть код:

y = int(input("Enter a cube number "))
cuberoot = y**(1/3)
if cuberoot.is_integer():
    print("integer")
else:
    if cuberoot == HERE.9999999:
        print("Integer")
    else:
        print("not integer")

help (где написано "ЗДЕСЬ" это то, что я положил туда)

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Используйте оператор по модулю.

y = int(input("Enter a cube number "))
cuberoot = y ** (1/3)
fraction = cuberoot % 1
if fraction == 0 or fraction > 0.999999:
    print("integer")
else:
    print("not integer")
1 голос
/ 11 февраля 2020

Использование допуска к ошибкам даст вам неправильные результаты для больших чисел. Например, 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.

...