проблема с типом данных в массиве
у меня проблема
ask = int(input("h"))
h = [0]*ask
h[1],h[2]=1,1
print(h[0],type(h[0]),h[1],type(h[1]))
for i in range(2,ask):
h[i]= int()
h[i]= h[i-1]+h[i-2]
if type(h[i] ** 0.5) != float():
print(type(h[i] ** 0.5))
print(h[i])
Этот код выводит ask чисел фибоначи и проверяет их на целый квадратный корень(например если попадает число 144 и квадратный корень из него является целым то 144 выводится принтом), но я не знаю что делать т.к. думаю что условие в if написал неправильно и тип выводимых данных float, как можно исправить проблему с типом float и ифом?
Ответы (2 шт):
Корень всегда будет числом с плавающей точкой. Проверяйте лучше, что остаток от деления на 1 равен 0, это нормально работает для проверки целых чисел:
if h[i] ** 0.5 % 1 == 0:
...
Другой вариант: брать целую часть от корня, возводить её обратно в квадрат, и проверять, что получилось то же, что и было до всех этих манипуляций:
if int(h[i] ** 0.5) ** 2 == h[i]:
...
Тоже самое можно чуть проще делать с использованием функции пакета math:
import math
if math.isqrt(h[i]) ** 2 == h[i]:
...
Возведение в дробную степень возвращает всегда float, поэтому для проверки чисел на полный квадрат лучше использовать этот ответ:
import math
def is_square(number: int) -> bool:
return number == math.isqrt(number) ** 2