我的 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()
工作原理如下:
n
乘以8减1
- 求那个数的平方根
- 减1除以2
- 去掉数字的小数部分
- 如果结果数大于0,则为三角形
您还可以使用 this answer 中的这个 lambda 来检查数字是否为三角形:
Triangular = lambda n:(8*n+1)**.5%1>0
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()
工作原理如下:
n
乘以8减1- 求那个数的平方根
- 减1除以2
- 去掉数字的小数部分
- 如果结果数大于0,则为三角形
您还可以使用 this answer 中的这个 lambda 来检查数字是否为三角形:
Triangular = lambda n:(8*n+1)**.5%1>0