【问题标题】:What wrong with my Python code to check the triangular number?我的 Python 代码检查三角数有什么问题?
【发布时间】:2016-04-13 03:51:35
【问题描述】:
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。请告诉我我做错了什么

【问题讨论】:

  • 测试用例有哪些?

标签: python-2.7 triangular


【解决方案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。

【讨论】:

  • 感谢您的回答。
  • 这个解决方案的时间复杂度是多少?
  • 这在技术上是三角形的1 上失败。
【解决方案2】:

试试这个 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

【讨论】:

  • 作为一个班轮is_triangular = lambda x: (0.5 * ((8 * x + 1) ** 0.5 - 1)).is_integer()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多