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

时间:2016-04-13 03:51:36

标签: python-2.7 triangular

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。请告诉我我的错误

2 个答案:

答案 0 :(得分:1)

试试这个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,则为三角形
  6. 你也可以使用this answer中的这个lambda来检查数字是否为Triangular:

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

答案 1 :(得分:0)

any()返回一个布尔值,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为三角形时,立即返回True。如果它到达列表的末尾并且没有找到,则返回false。