- Python — Проверьте, является ли число квадратом
- 14 ответов
- КАК ПРОВЕРИТЬ ЯВЛЯЕТСЯ ЛИ ЧИСЛО КВАДРАТОМ PYTHON
- Python — проверьте, является ли число квадратом
- Python-сообщество
- #1 Июнь 18, 2022 15:51:17
- Функция, проверяющая является ли число квадратом целого числа
- #2 Июнь 18, 2022 16:22:21
- Функция, проверяющая является ли число квадратом целого числа
- #3 Июнь 19, 2022 07:53:33
- Функция, проверяющая является ли число квадратом целого числа
Python — Проверьте, является ли число квадратом
Я уверен, что этот код работает. Но когда я сделал тестовые примеры, пример: test.expect( is_square( 4)) , это говорит о том, что значение не то, что ожидалось.
14 ответов
Ваша функция на самом деле не работает, так как она немедленно вернет False при первом найденном неквадратном корне. Вместо этого вы захотите изменить свой код так:
так что он возвращает false только после того, как все возможные квадратные корни были проверены. Вы также можете посмотреть в math.sqrt() а также float.is_integer() , Используя эти методы, ваша функция станет такой:
from math import sqrt def is_square(n): return sqrt(n).is_integer()
Имейте в виду, что этот метод не будет работать с очень большими числами, но ваш метод будет очень медленным с ними, поэтому вам придется выбирать, какой использовать. Надеюсь, я помог!
Чтобы придерживаться целочисленных алгоритмов, вы можете взглянуть на реализацию двоичного поиска для нахождения квадратного корня:
Основная идея философии Python — написать простой код. Чтобы проверить, является ли число идеальным квадратом:
def is_square(n): return n**0.5 == int(n**0.5)
При включении поплавка вы можете найти корень числа.
В Python 3.8+ используйте это:
def is_square(n): root = math.isqrt(n) return n == root * root
Вы можете просто использовать simpy module import it as,
from sympy.ntheory.primetest import is_square
и вы можете проверить такой номер:
Он вернет логическое значение
Я думаю, что лучше всего использовать только «встроенную» целочисленную арифметику:
def issquare(n): return math.isqrt(n)**2==n
(Квадраты x**2 априори вычисляются более эффективно, чем произведения x*x. )
Согласно моим таймингам, это (по крайней мере, до ~ 10 ^ 8) быстрее, чем sympy.numtheory.primetest.is_square .
(Я использую другое имя, чтобы было проще сравнивать их.) Последний сначала использует некоторые модульные проверки, которые должны значительно ускорить его, но у него так много накладных расходов на преобразование и тестирование ( int , as_int , квадраты становятся n-ми степенями с n=2, целые числа преобразуются из «маленьких» в целые с множественной точностью и обратно, . ), что все преимущество теряется. После множества тестов он примерно делает вышеописанное, используя ntheory.nthroot, что опять-таки является излишеством: предназначено для любого n-го корня, квадратный корень — это всего лишь один частный случай, и noting оптимизирован для этого случая. Некоторые подпрограммы там даже выполняют очень странные арифметические операции с плавающей запятой, включая умножение на 1.0000000001 и тому подобные ужасы. Однажды я получил следующее ужасное сообщение об ошибке: (исходный вывод имеет полный путь «C:\Users\Username\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\» вместо каждого «. » ниже. )
File ". \sympy\ntheory\primetest.py", line 112, in is_square return integer_nthroot(n, 2)[1] File ". \sympy\core\power.py", line 86, in integer_nthroot return _integer_nthroot_python(y, n) File ". \sympy\core\power.py", line 94, in _integer_nthroot_python x, rem = mpmath_sqrtrem(y) File ". \mpmath\libmp\libintmath.py", line 284, in sqrtrem_python y = isqrt_small_python(x) File ". \mpmath\libmp\libintmath.py", line 217, in isqrt_small_python r = int(x**0.5 * 1.00000000000001) + 1 KeyboardInterrupt
Это дает хорошее представление о бездне, в которую sympy безнадежно тонет.
КАК ПРОВЕРИТЬ ЯВЛЯЕТСЯ ЛИ ЧИСЛО КВАДРАТОМ PYTHON
Для того чтобы проверить, является ли число квадратом в Python, мы можем воспользоваться математической библиотекой math и методом sqrt(), который возвращает квадратный корень числа. Если результатом является целое число, то исходное число было квадратом. Если же нет, то число не является квадратом.
import math
x = 16
if math.sqrt(x) % 1 == 0:
print(«Число», x, «является квадратом»)
else:
print(«Число», x, «не является квадратом»)
В данном примере мы импортируем библиотеку math и сохраняем число 16 в переменную x. Затем мы используем функцию sqrt() для вычисления квадратного корня числа x. Проверяем, является ли результат целым числом, и выводим соответствующее сообщение в консоль.
Может ли быть это число квадратом целого числа?
Надёжный тест простоты чисел [Numberphile]
Проверка простоты числа перебором делителей. Решение задачи на Python
Является ли число идеальным квадратом (имеет ли квадратный корень)? — JS Задачи
21 Цикл while. Нахождение всех делителей числа Python
#10 Является ли предложенное число квадратом другого числа
Как решать задачи как программист. Не пиши код, не посмотрев это видео
12 Задача: Определить число четное или нечетное при помощи Python
- Математика и python для анализа данных coursera torrent
- Бот техподдержки telegram python
- Python сложение классов
- Java на python
- Как установить django filters
- Библиотеки python для машинного обучения
- Python import telebot не работает
- Преобразование френеля python
- Подключение python к oracle
- Django динамические url
- Экспонента в питоне numpy
- Python notepad скачать
- Перевести из массива numpy в тензор с типом torch float32
- Генерация изображений нейросетью python
- Python сортировка файлов по имени
Python — проверьте, является ли число квадратом
Я уверен, что этот код работает. Но когда я делал тестовые примеры, например: test.expect( is_square( 4)) , он говорит, что это не то, что ожидалось.
Ваша функция фактически не работает, так как она немедленно возвращает False на первый найденный неквадратичный корень. Вместо этого вы захотите изменить свой код:
def is_square(n):
if n return False
else:
for i in range(int(n/2)+1):
if (i*i)==n:
return True
return False
так что он возвращает false только после проверки всех возможных квадратных корней. Вы также можете посмотреть в math.sqrt() и float.is_integer() . Используя эти методы, ваша функция станет такой:
from math import sqrtdef is_square(n):
return sqrt(n).is_integer()
Имейте в виду, что этот метод не будет работать с очень большими числами, но ваш метод будет очень медленным с ними, поэтому вам придется выбирать, что использовать. Надеюсь, я помог!
Чтобы придерживаться целочисленных алгоритмов, вы можете посмотреть на реализацию бинарного поиска для поиска квадратного корня:
def is_square(n):
if n < 0:
return False
if n == 0:
return True
x, y = 1, n
while x + 1 < y:
mid = (x+y)//2
if mid**2 < n:
x = mid
else:
y = mid
return n == x**2 or n == (x+1)**2
Основная идея философии Python — написать простой код. Чтобы проверить, является ли число идеальным квадратом:
def is_square(n):
return n**0.5 == int(n**0.5)
Python-сообщество
- Начало
- » Центр помощи
- » Функция, проверяющая является ли число квадратом целого числа
#1 Июнь 18, 2022 15:51:17
Функция, проверяющая является ли число квадратом целого числа
Написал функцию, но проблема в том, что при извлечении квадратного корня из числа, результат принимает вид “2.0” и проверка функцией isinstance показывает, что это число не целое. Не пойму как решить проблему с этой точкой?
def square_number(n): num = n sqrt = math.sqrt(num) print(type(sqrt)) if isinstance(sqrt, int): return True else: return False for number in range(1, 100): if square_number(number): print(f'Число является квадратом целого числа') else: print(f'Число не является квадратом целого числа')
#2 Июнь 18, 2022 16:22:21
Функция, проверяющая является ли число квадратом целого числа
if sqrt.is_integer(): return True else: return False
#3 Июнь 19, 2022 07:53:33
Функция, проверяющая является ли число квадратом целого числа
Никак вы ее не решите. Результат извлечения корня это действительное число. В целое оно превратится только округлением. Но округлить можно любое действительное число.
Вам надо полностью менять алгоритм. воспользуйтесь тем что произведение целых целое число.