Программа Python на идеальных квадратах

Я написал эту функцию Python, которая принимает список в качестве параметра и определяет, какие элементы списка являются идеальными квадратами, а затем возвращает новый список только этих элементов выбора.

Вот моя функция:

def square(n):
    return n**2

def perfectSquares1(L):
    import math
    m=max(L)
    for n in L:
        if type(n) is int and n>0:
            Result=map(square,range(1,math.floor(math.sqrt(m))))
            L1=list(Result)
    L2=list(set(L).intersection(set(L1)))
    return L2

Но теперь я пытаюсь немного переработать его: я хочу написать однолинейную булеву функцию, которая принимает n в качестве параметра и возвращает True, если n идеальный квадрат, и возвращает false в противном случае.

Любой совет? Я не могу придумать способ сделать это только одной строкой.

3 ответа

Решение

Ты можешь сделать:

import math
def perfect_sq(n):
    return n == int(math.sqrt(n)) * int(math.sqrt(n))

Или вы можете использовать:

import math
def perfect_sq(n):
    return n == int(math.sqrt(n)) ** 2
lambda n: math.sqrt(n) % 1 == 0

Могли бы использовать оператор по модулю:

>>> def perfectsquare(n):
...     return not n % n**0.5
...
>>> perfectsquare(36)
True
>>> perfectsquare(37)
False
>>> perfectsquare(25)
True
>>> perfectsquare(4215378*4215378)
True
Другие вопросы по тегам