#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 основных недоразумения:
- Используется
==
для сравнения объектов, а не для назначения. Я полагаю, вы хотели присвоитьs
значениеmath.sqrt(x)
. Это делается с помощьюs = math.sqrt(x)
. - Даже с вышеуказанным изменением вы не можете поместить это назначение внутрь
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
всегда возвращает значение с плавающей точкой.