【发布时间】:2021-01-05 22:35:40
【问题描述】:
我正在尝试将以下代码的输出存储到列表中
lower = int(input("Enter the begining of the range: "))
upper = int(input("Enter the end of the range: "))
print("Prime numbers between", lower, "and", upper, "are:")
for num in range(lower, upper + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
numlist = []
numlist.append(num)
print(numlist)
我希望输出在列表[p1, p2, p3,...pn] 中。但是,我最终得到以下结果:
Enter the begining of the range: 1
Enter the end of the range: 10
Prime numbers between 1 and 10 are:
[2]
[3]
[5]
[7]
这种方法是正确的还是有更好的方法来满足要求?我还尝试添加一行代码,让用户可以看到 (4) 个介于 1 和 10 之间的素数。
【问题讨论】:
-
您应该创建并打印
numlist在循环之外。 -
每次内部循环中断时,您都会创建一个新的
numlist,替换前一个,并且每次附加值后都会打印它。在外循环之外和之前创建列表,并且只在外循环之外和之后打印一次。这样,您将可以在循环后访问结果列表并打印其len()解决了第二个问题。 -
请注意,创建素数列表的方法要快得多。不清楚这对你是否重要。
-
添加到@MarkRansom,“范围内的所有素数”的典型(也是最容易理解的)解决方案是埃拉托色尼筛。它可以通过多种方式实现(从“比试除法更高效,但可能有点内存消耗”到“比试除法效率多”)。
-
@ShadowRanger 一个幼稚的筛子会占用内存,但它不必如此。见stackoverflow.com/q/62899578/5987。
标签: python