1
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

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

4

2 回答 2

1

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。

于 2016-04-13T03:59:13.360 回答
1

试试这个 lambda:

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

以下是它的工作原理:

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

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

Triangular = lambda n:(8*n+1)**.5%1>0
于 2017-11-17T05:11:01.007 回答