python 嵌套的for循环越来越令人困惑,尤其是它们的迭代

cld4siwp  于 2023-04-19  发布在  Python
关注(0)|答案(2)|浏览(125)

我有这个代码,如果我输入数字3,它会输出0和1。

num = int(input("Enter number"))
      for i in range(num):
        for j in range(i):
          print(j)

问题是我知道它会打印第一个0,因为范围(0)防止for j代码在for i的第一次迭代上执行。当i = 1时,它显然输出0,因为它是J的第一次迭代。但是当i = 2时,我知道j循环运行两次是因为range(2)但我很困惑为什么它输出0和1而不是1和2,因为它是J的当前迭代。谁能解释一下这个问题,教一点嵌套的for循环?
我试了代码,预期是0,1,2,但我得到了0 0 1。

6jjcrrmo

6jjcrrmo1#

因为for j循环的每次运行都要重新开始。您正在运行三个循环:一个是range(0),它什么也不做,一个是range(1),它产生0,一个是range(2),它产生0 1。它与以下相同:

for i in range(3):
   print(list(range(i))
50pmv0ei

50pmv0ei2#

你得到0,0,1而不是0,1,2的原因是因为循环的设置方式。让我们仔细看看当i = 2时循环中发生了什么:
关于外循环的第一次迭代(i = 2),内部循环(对于range(i)中的j)运行两次,其中j取值0和1。当j = 0时,执行print语句,打印j的值,其为0。当j = 1时,再次执行print语句,打印j的值,所以当i = 2时,循环的输出是0,1。
在输出中看到两个0的原因是因为循环的设置方式。当i = 0和i = 1时,内部循环(对于range(i)中的j)根本不执行,因为range(i)返回一个空范围。这意味着外部循环的迭代中没有任何内容,因此当i = 2时,输出以0,0,1开始。
要得到预期的输出(0,1,2),可以将内部循环的范围从1而不是0开始。这将给予所需的输出。
试试这个代码:

num = int(input("Enter number"))
for i in range(num):
    for j in range(1, i+1):
        print(j)

在这个更新的代码中,当i = 2时,内部循环运行两次,j取值1和2。因此,当i = 2时,输出将是1,2。

相关问题