我的问题不在于产出,而在于我们如何达到产出
原件-
n=5
i=0
j=1
line=''
for i in range(i,n+1):
for j in range(j,i+1):
line = line + str(j) + " "
j += 1
i +=1
print( line)
我得到了预期的结果-
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
现在如果我去掉i +=1
,我仍然得到相同的输出。我不知道为什么?
为了进一步测试它,我试着删除j +=1
,看看whet
n=5
i=0
j=1
line=''
for i in range(i,n+1):
for j in range(j,i+1):
line = line + str(j) + " "
#j += 1 ##Commenting the inner loop
#i +=1 ##Commenting the outer loop
print( line)
输出-
1
1 1 2
1 1 2 2 3
1 1 2 2 3 3 4
1 1 2 2 3 3 4 4 5
现在我很困惑为什么去掉外循环不会改变任何东西,而内环会改变输出?如果我去掉外环,它怎么会增加?你知道吗
内循环与外循环的区别在于,在外循环的每次迭代中,都会创建新的内循环,因此内循环的起点(“j”)取决于在循环外定义的变量“j”的快进,与在循环外定义的“i”不同,但每次迭代“for循环”都会保存循环的元数据(我猜)并查看上一次迭代。你知道吗
这就是为什么在外循环中,增量不起作用的原因- for循环只依赖于在for循环中定义的i,每个循环他都会查看上一个迭代值,而内部循环每次外部迭代都会创建新的for循环并查看j的值
此外 如果在已知的DS(Array,Dict…)上使用for循环,pythonic方法是迭代元素,而不是使用索引的“C”样式:)
在第一个版本中,有几个错误相互抵消。以下是无需手动增量的正确版本:
真正的问题是:为什么手动递增的版本可以工作?让我们试着遵循逻辑:
首先,如果删除
i += 1
行,结果将保持不变,因为范围range(i,n+1)
只计算一次range(0,n+1)
。实际上,在计算范围时,i
具有值0
。代码相当于:让我们看看
for j in range(j,i+1)
。因为j
是递增的,所以它总是与i
具有相同的值,因此这个范围只有一个元素:range(1,2)
,range(2,3)
。。。代码相当于:相当于:
或:
要理解的是,不是为每个
i
构建一行,而是构建一行1 2 3 4 5
,然后打印中间结果。你知道吗奖励:单行版本:
当循环被迭代时,手动增加计数器i和j不会改变计数器变量的状态。运行此代码以了解:
输出:
相关问题 更多 >
编程相关推荐