好吧,让我们一行一行地思考,就像我们是计算机一样。
n = int(raw_input("How many rows? "))
我们获取用户输入的内容,将其转换为整数,并将结果存储在n
.
for row in xrange(n):
我们正在循环xrange(n)
,这或多或少相同[0, 1, 2, 3, 4]
(尽管xrange
不会一次存储完整列表,因此内存效率更高)。所以现在我们知道,无论何时我们row
在未来看到,我们都必须用我们所在的任何一个数字来替换它。
for col in xrange(row+1):
这一行与上一行类似;nowcol
是列表中的值之一,从.0
中存储的值开始计数row
。所以如果row
是2
在外循环的这次迭代中,内循环将运行 3 次。第一次col
将相等0
,第二次1
和第三次将相等2
。(对于这些col
值中的每一个,row
将保持2
,因为row
仅在外部循环经过迭代时才会更改。)
print "*",
这是*
s 实际打印的地方。这里棘手的一点是行尾的逗号。不带逗号的print
语句只打印一些内容,然后移至下一行。当您添加逗号时,它基本上会打印该行,但在该行之后添加一个空格而不是一个新行 ( \n
)。因此,由于对每个col
值都调用了这一行,因此它将*
在一行上为每个值打印 a 后跟一个空格col
。
print
请注意,这不在 col 循环内。该语句只打印一个换行符。这里的想法是在打印每一行之后打印一个新行,以便*
将下一行的 s 添加到新行,而不是前一行。如果这print
不在这里,所有的星星都将打印在一行上。
因此,对于每个值,该程序在一行上row
打印s 的row+1
数量。*
针对问题编辑:
我可以看到怎么col
可能是一个令人困惑的名字。col
只是正在打印的当前列号。*
要更清楚地看到这一点,请尝试替换print "*",
为print col,
. 您应该得到以下信息:
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
(记住range(3)
产生[0,1,2]
,而range(3+1)
产生[0,1,2,3]
。)