首页 > 解决方案 > 解释 Python 文档第 4.4 节

问题描述

我正在浏览 Python 文档,无法理解第 4.4 节中发生的事情

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        print(n, 'is a prime number')

我遇到的主要问题是了解在这些循环的第一次迭代中分配给 n 和 x 的内容(也许我不完全理解嵌套循环),但我假设在第一次迭代中我们应该得到类似的东西:

for 2(n) in range(2,10):
    for 2(x) in range(2, 2(n)):
        if 2 % 2 == 0

但这没有发生(我知道 2 是一个素数),但我不明白为什么这不是发生的行为。提前感谢帮助!

标签: pythonpython-3.x

解决方案


您的困惑不是嵌套循环,而是range函数。

range(2, 2)是一个空范围,因为它不包括端点。

举例说明:list(range(3)) == [0, 1, 2]

注意:当迭代一个空范围时,什么也没有发生。因此,例如,以下代码不会产生错误或打印任何内容:

for i in range(0):
    print('Nothing here')
    raise ValueError

因此,当n为 2 时,for 循环for x in range(2, 2)什么也不做。x不取值None或任何其他值。如果您尝试将空范围转换为 a list,它将简单地返回[]空的list

for循环对某个集合中每个元素执行一组操作一次。当集合为空或有 0 个元素时,该组操作执行 0 次。


推荐阅读