我的 Python 检查三角数的代码有什么问题?

What wrong with my Python code to check the triangular number?

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

所有测试用例都为False。请告诉我我错了什么

any() returns 布尔值,True 或 False。您正在将它与整数 n 进行比较。将行更改为

if n in arr:

或者更好的是,您可以删除整个 if..else 语句并将其替换为:

return n in arr

编辑:您甚至可以像这样避免首先创建数组:

def Triangular(n):
    arr = []
    for i in range(n):
        if i*(i+1)/2 == n:
            return True
    return False

当它发现 n 是三角形时,这立即 returns 为真。如果它到达列表的末尾但没有找到任何内容,则它 returns false。

试试这个 lambda:

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

工作原理如下:

  1. n乘以8减1
  2. 求那个数的平方根
  3. 减1除以2
  4. 去掉数字的小数部分
  5. 如果结果数大于0,则为三角形

您还可以使用 this answer 中的这个 lambda 来检查数字是否为三角形:

Triangular = lambda n:(8*n+1)**.5%1>0