Идеальная квадратная функция

#python

#python

Вопрос:

Я пытаюсь создать функцию, которая говорит «да», если число является идеальным квадратом. Ниже приведен код, пожалуйста, предложите изменения, которые мне нужно внести, учитывая, что я новичок.

 def perfsq(x):

    if s == (math.sqrt(x)) and s * s == x:
        print('yes')

 

Комментарии:

1. что s здесь?

2.1) s не определено, 2) достаточно проверить, является ли math.sqrt(x) это целым числом.

Ответ №1:

Я надеюсь, что это может помочь:

 import math

number = int(input("Enter the Number"))

root = math.sqrt(number)

if int(root   0.5) ** 2 == number:
    print("YES")
else:
    print("NO")
 

Комментарии:

1. почему добавлено 0.5?

2. В некоторых случаях большого числа корень может быть не совсем целым числом, оно может быть на несколько десятичных знаков меньше, и метод int() принимает значение floor, добавляя 0,5 к числу с плавающей запятой

3. в случае небольшого числа, скажем, 25, почему оно не дает неправильного результата. если int(root 0.5) ** 2 == Число (25): ( 5 0.5) ** 2 != 25

4. В случае небольших чисел, таких как 25, sqrt(25) равно 5, а минимальное значение 5.5 будет равно 5. Тогда 5 ** 2 снова станет 25, что равно числу, которое мы ввели.

Ответ №2:

пример 1:

 import math

def perfsq(x):
    if math.sqrt(x)%1 == 0:
        print('yes')
    else:
        print('no')
 

вызовите свою функцию:

 perfsq(16)
 

пример 2:

 x = 16

print('yes') if math.sqrt(x)%1 == 0 else print('no')
 

Ответ №3:

Ваша функция имеет ошибку, поскольку s не определена. Ваш код должен быть следующим —

 def perfsq(x):
    s = math.sqrt(x)          # You didn't define s in your code
    if s == (math.floor(s)):  # Just check if square root is an integer
        print('yes')
        return True
    else :
        print('No')
        return False
 

Ответ №4:

рассмотрим это

 def perfsq(x):
    s = math.sqrt(x)
    p = int(s)
    return p==s
 

Комментарии:

1. Кроме того, if whatever: return True else: return False это просто return whatever .

2. Ответы только для кода почти всегда можно улучшить, добавив некоторое объяснение того, как и почему они работают. В этом случае отредактируйте ответ, указав, что вы извлекаете квадратный корень, а затем создаете копию этого значения, которое эффективно усекается путем преобразования в целое число, чтобы увидеть, был ли начальный результат целым числом.

Ответ №5:

Похоже, у вас есть 2 основных недоразумения:

  1. Используется == для сравнения объектов, а не для назначения. Я полагаю, вы хотели присвоить s значение math.sqrt(x) . Это делается с помощью s = math.sqrt(x) .
  2. Даже с вышеуказанным изменением вы не можете поместить это назначение внутрь if инструкции. if Условие может содержать выражения, а не операторы. Присваивания — это операторы.

Чтобы исправить это, все, что вам нужно сделать, это сначала назначить s отдельно:

 import math

def perfsq(x):
    s = math.sqrt(x) 
    if s * s == x:
        print('yes')
 

Теперь ваша проблема в том, что вы становитесь зависимыми от точности с плавающей точкой. sqrt возвращает значение с плавающей точкой, поэтому выполнение операций с плавающими числами (например, s * s ) является рискованным. В качестве примера, используя приведенную выше функцию, running perfsq(35) фактически будет печатать 'yes' !!!

Чтобы избежать этих проблем с точностью, достаточно для начала проверить, является ли квадратный корень из числа int . Таким образом, ваш код может быть значительно упрощен до:

 import math

def perfsq(x):
    if math.sqrt(x).is_integer():
        print('yes')
 

Это использует float.is_integer() метод, основанный на том факте, что math.sqrt всегда возвращает значение с плавающей точкой.