Python 2.7 检查三角形数字的Python代码有什么问题?

Python 2.7 检查三角形数字的Python代码有什么问题?,python-2.7,triangular,Python 2.7,Triangular,所有测试用例都是假的。请告诉我我错了什么any()返回布尔值,True或False。您正在将其与整数n进行比较。换行 def Triangular(n): arr = [] for i in range(n): T = i*(i+1)/2 arr.append(T) if n == any(arr): return True else: return False 或者更好的是,您可以删除整个if..

所有测试用例都是假的。请告诉我我错了什么

any()
返回布尔值,True或False。您正在将其与整数
n
进行比较。换行

def Triangular(n):
    arr = []
    for i in range(n):
        T = i*(i+1)/2
        arr.append(T)
    if n == any(arr):
        return True
    else:
        return False
或者更好的是,您可以删除整个
if..else
语句,并将其替换为:

if n in arr:
编辑:您甚至可以避免在一开始创建数组,如下所示:

return n in arr
当它发现
n
是三角形时,立即返回True。如果它到达列表的末尾,但没有找到任何值,则返回false。

尝试以下lambda:

def Triangular(n):
    arr = []
    for i in range(n):
        if i*(i+1)/2 == n:
            return True
    return False
下面是它的工作原理:

  • n
    乘以8减去1
  • 求那个数的平方根
  • 把它减去1,再除以2
  • 删除数字的小数部分
  • 如果结果数大于0,则为三角形
  • 您还可以使用此lambda from检查数字是否为三角形:

    Triangular = lambda x: (0.5 * ((8 * x + 1) ** 0.5 - 1)).is_integer()
    

    什么是测试用例?谢谢你的回答。这个解决方案的时间复杂度是多少?这在技术上是三角形的
    1
    上失败。作为一个单线性
    是三角形=λx:(0.5*((8*x+1)**0.5-1))。是整数()
    Triangular = lambda n:(8*n+1)**.5%1>0