打印向下三角形的Python代码逻辑存疑:为何空格计算看似矛盾却输出正确?
向下三角形打印代码的逻辑解析
先看这段实现向下三角形的Python代码:
n=int(input("Please Enter Number: ")) a="*" k=" " for i in range(n,-1,-1): for j in range(i+1): k=" "*((n+1)-j) print(k+(a*i)+a+(a*i)) k=" "
你觉得空格逻辑有问题,是忽略了内层循环的最后一次赋值会覆盖之前的结果。
内层for j in range(i+1)循环里,j会从0一直跑到i,每次循环都会重新计算k的空格数,但只有最后一次(也就是j=i的时候)的赋值才会保留下来。此时空格数是(n+1)-i:
- 当i=n时,空格数是
(n+1)-n=1 - 当i=n-1时,空格数是
(n+1)-(n-1)=2 - ...
- 当i=0时,空格数是
(n+1)-0=n+1
随着外层循环i从n递减到0,(n+1)-i的值会越来越大,所以实际输出的空格也就跟着递增了。
说白了就是内层循环做了很多无用的赋值,只留下最后一次的结果,刚好满足了向下三角形需要的空格递增要求。
内容的提问来源于stack exchange,提问作者naruto_coder
相关产品推荐
相关产品推荐

