适用于range(2,2)的i的Python:print(i)我的变量包含什么,它不包含值2?

时间:2018-08-21 00:32:39

标签: python python-3.x

我试图逐步了解该程序的工作方式

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        # loop fell through without finding a factor
        print(n, 'is a prime number')

for i in range(2,2):
    print(i)

此代码不会打印任何内容,因此我包含的实际值是多少,是否包含垃圾值。

2 个答案:

答案 0 :(得分:1)

range(2, 2)是一个空序列。范围是半开的,因此range(2, 2)的意思是“所有整数>=2<2”,其中没有一个:

>>> len(range(2, 2))
0
>>> list(range(2, 2))
[]

因此,当您进行迭代时,会得到一个空的迭代器:

>>> it = iter(range(2, 2))
>>> next(it)
StopIteration:

因此,for i in range(2, 2):循环0次,甚至没有为i分配任何内容,更不用说print了。

因此i包含此for语句之前包含的所有内容:

>>> i = 'this is a string'
>>> for i in range(2, 2): pass
>>> print(i)
this is a string

…,或者,如果不包含任何内容,则没有i变量:

>>> del i
>>> for i in range(2, 2): pass
>>> print(i)
NameError: name 'i' is not defined

答案 1 :(得分:-1)

对于范围(2,2)中的i,结果为空列表[]

代码如下:

对于范围(2,11)中的n:     对于范围(2,n)中的x:         如果n%x == 0:             打印(n,“素数”)             打破     其他:         打印(n,不是素数)

结果: 2不是素数 3不是素数 4个素数 5不是素数 6个素数 7不是素数 8个素数 9个素数 10个素数