为什么我的范围函数不能从“开始”值开始?

时间:2020-05-03 20:05:29

标签: python range

使用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,但是如果有人可以确认(或更好)解释这种情况的发生,那将是很好的 >

2 个答案:

答案 0 :(得分:1)

是的,当起始值等于范围的终止点时,迭代器为空-即该时间段内没有迭代。

答案 1 :(得分:1)

x = 1
y = 5
for i in range(x, y):
    print(i)

将输出为:

1
2
3
4

请注意,未打印y=55

即,上限等于给定的上限

因此,在这种情况下:range(2, 2)range(2,3)没有任何内容。