Во-первых, вам нужно использовать заглавные буквы от math
до Math
.
Другая проблема с этим кодом - возвращаемое значение Math.sqrt
.Предположим, вы поставили 4
как значение x
.Math.sqrt
всегда возвращает число с плавающей точкой (десятичное число), даже если это число с плавающей точкой является круглым числом, поэтому результатом будет 2.0
.Что касается Ruby и большинства языков программирования, 2.0
не является целым числом.Это все еще число с плавающей точкой, только у которого нет десятичной части.
Самый простой способ проверить, является ли число с плавающей точкой целым числом, состоит в том, чтобы изменить его на 1 (то есть разделить его на 1 и получитьостаток), что можно сделать с помощью %
, а затем убедитесь, что этот остаток равен 0.
def is_square(x)
return true if Math.sqrt(x) % 1 == 0
end
Эта функция все еще не идеальна;возвращает true
для квадрата и nil
для неквадрата.Вместо этого было бы разумнее вернуть false
для неквадрата.
Это можно сделать, удалив if
и просто вернув результат условного выражения.Кроме того, return
в Ruby не требуется для последнего оператора блока.
def is_square(x)
Math.sqrt(x) % 1 == 0
end