我的代码表明波纹管发现任何两个数字之间的三角数
import math,sys
#create a list with numbers
def create_list():
num_list=[]
for num in range(int(input("insert start point: ")),int(input("Insert end point: "))):
num_list.append(num)
return num_list
#function to find triangular numbers
def get_triangles(numlist):
triangles = []
for i in numlist:
if (check_triangle(i)):
triangles.append(i)
return triangles
#function to check number is triangular or not
def check_triangle(n):
return math.sqrt((8*n)+1).is_integer()
#function main to run the process
def main():
numlist = create_list()
print(get_triangles(numlist))
即使它看起来像任务完成它不是。我尝试了范围为0 - 100000000(1 * 10^8)的数字。这是因为我的笔记本电脑卡住了任何可以完成此任务的方法?
您的程序正常运行,当您尝试查找如此大的数字时,效率不高。你的问题是什么?为什么你需要检查这么大的范围?不是逐个检查每个数字,而只是生成三角数字的序列,直到找到大于10^8的数字为止? – hankd
您正在建立一个包含1亿个数字的列表,然后无条件地将其复制到第二个列表(并以尽可能最慢的方式),然后*执行其他1亿次。这是......需要一些时间。 – geoffspear
我对你的算法的质量没有任何要求 - 确实有比检查范围内的每个整数更好的方法 - 但更好的实现你选择的算法的方法是'triangles = itertools.ifilter(check_triangle,xrange(start,end) )'。这将返回一个将产生三角形数字的迭代器;如果你确实需要列表,你可以调用'list(triangles)'。 –