Python 2 is_integer не возвращается должным образом - PullRequest
0 голосов
/ 24 мая 2018
from fractions import Fraction

counter = 0;
a = int(raw_input())
b = int(raw_input())

if 1 <= a <= 10 ** 8:
    if a <= b <= 10 ** 8:
        for i in range(a, b+1):
            if float(i**Fraction(1,3)).is_integer() == True:
                counter += 1
                print(i)

print(str(counter))
print (str(float(64**Fraction(1,3)).is_integer()))

Этот код возвращает false, что приводит к тому, что оператор if вообще не выполняется.Кроме того, корень куба 64 равен 4, поэтому результат должен быть целым числом.Однако, в диапазоне от 1 до 100 включительно, 1, 8 и 27 возвращают true для этого случая.Любая помощь будет благодарна за то, почему корень куба 64 не возвращает истину.

1 Ответ

0 голосов
/ 24 мая 2018

Вы использовали float для значения корня куба.Следующий код дает вам значение float(i**Fraction(1,3)) = 3.9999999

Попробуйте сначала округлить значение перед преобразованием его в число с плавающей точкой.

if float(round(i**Fraction(1,3),2)).is_integer() == True:

...