【问题标题】:Python Program on Perfect Squares [duplicate]完美正方形上的 Python 程序
【发布时间】:2013-07-04 17:39:49
【问题描述】:

我编写了这个 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 作为参数,如果 n 是一个完美的正方形则返回 True,否则返回 false。

有什么建议吗?我想不出一种方法让它只有一条线。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    可以使用模运算符:

    >>> def perfectsquare(n):
    ...     return not n % n**0.5
    ...
    >>> perfectsquare(36)
    True
    >>> perfectsquare(37)
    False
    >>> perfectsquare(25)
    True
    >>> perfectsquare(4215378*4215378)
    True
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      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
      

      【讨论】:

      • 不是我的反对意见,但 perfect_sq(11) 为我返回 True。
      • 我怎样才能让函数返回'true'?
      • 每个数字都是完美的平方,11是11**0.5的完美平方。这个问题只有在我们谈论整数时才会有趣。
      • 是的,我完全傻了。很抱歉xD
      • 请注意,对于足够大的数字,这将失败,因为math.sqrt 只有双精度,但要解决这个问题,您需要使用任意精度的浮点计算(如Decimal)或实现一个整数根算法(其中几个在 Haidro 链接的问题中给出。)
      【解决方案3】:
      lambda n: math.sqrt(n) % 1 == 0
      

      【讨论】:

      • 我怎样才能让函数返回'true'和'false'呢?
      • 这是一个布尔值,因此您像任何其他条件测试一样得到真或假。
      • 调用它。 (lambda n: math.sqrt(n) % 1 == 0)(16)。或sq = lambda n: math.sqrt(n) % 1 == 0; sq(16).
      • 或将其定义为函数:def isSquare(n): return math.sqrt(n) % 1 == 0
      猜你喜欢
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 2022-08-23
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多