使用python列出所有素数是一个常见的硬件问题,使用SO和其他站点已经找到了使用类似于以下内容的for循环解决此问题的方法:
def count_primes(num):
primes = []
for y in range (2, num):
for z in range(2, y):
if y % z == 0:
break
else:
primes.append(y)
return primes
当我打印z的第一个实例时,我得到以下信息:
(2,3)
那么我的问题是,为什么y = 3的第一个实例?
假设范围是(2,num),则y的实例不会从2到num-1?
很明显,如果上述情况正确,则2不在列表中,但是我无法绕开为什么以3开头才能使此功能起作用的情况。
另外,当我使用print检查值时,y确实从2开始,但是在第二个for循环之后从3开始:
def count_primes(num):
primes = []
for y in range (2, num):
print(f'y = {y}')
for z in range(2, y):
print(f'y = {y}, z = {z}')
#if y % z == 0:
#break
#else:
#primes.append(y)
#return primes
count_primes(5)
这将返回:
y = 2
y = 3
y = 3, z = 2
y = 4
y = 4, z = 2
y = 4, z = 3
我很高兴您可以对此y值进行任何说明
*我相信是因为range(2,2)本质上是无效的,所以它再次循环到y = 3,但是如果有人可以确认(或更好)解释这种情况的发生,那将是很好的
>答案 0 :(得分:1)
是的,当起始值等于范围的终止点时,迭代器为空-即该时间段内没有迭代。
答案 1 :(得分:1)
x = 1
y = 5
for i in range(x, y):
print(i)
将输出为:
1
2
3
4
请注意,未打印y=5
和5
。
即,上限等于给定的上限
因此,在这种情况下:range(2, 2)
和range(2,3)
没有任何内容。