为什么这段代码:
n = int(raw_input("How many rows? "))
for row in xrange(n):
for col in xrange(row+1):
print "*",
print
显示这个结果(当 n = 5 时)?
*
* *
* * *
* * * *
* * * * *
编辑 - 我不明白它是如何一步一步得到这个表格的。col是指列数吗?因为即使列的输入是(行+1),列数等于行数也是没有意义的。
为什么这段代码:
n = int(raw_input("How many rows? "))
for row in xrange(n):
for col in xrange(row+1):
print "*",
print
显示这个结果(当 n = 5 时)?
*
* *
* * *
* * * *
* * * * *
编辑 - 我不明白它是如何一步一步得到这个表格的。col是指列数吗?因为即使列的输入是(行+1),列数等于行数也是没有意义的。
好吧,让我们一行一行地思考,就像我们是计算机一样。
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]。)
你的代码告诉它这样做。假设n = 5。然后你跳入for循环。第一次通过 var 行是 0。因此,当您为列启动第二个 for 循环时,您编写xrange(row+1). 好吧,如果 row 为 0,则 row + 1 = 1。所以它将显示一个星号。然后跳到第一个 for 循环。好的,第二次迭代,变量 row 变为 1。因此,row + 1 = two,所以当你再次进入第二个 for 循环时,它会循环直到 hit 命中两个。然后重新开始,这个过程会不断重复,直到你有 5 行,每行都有足够的列来满足该行 + 1 列。只需一步一步地按照代码进行操作。