Python金字塔打印代码中k=2*rows-2及k=k-2的作用咨询
解答金字塔打印代码的两个疑问
先贴出原代码:
# number of rows rows = 5 k = 2 * rows - 2 for i in range(0, rows): # process each column for j in range(0, k): # print space in pyramid print(end=" ") k= k-2 for j in range(0, i + 1): # display star print("* ", end="") print("")
1. 代码中k = k-2的作用是什么?
k是用来控制每一行开头的空格数量的:
- 第一行(
i=0)只打印1个星号,需要足够的前置空格让星号居中,这时候用初始的k值输出空格; - 每往下一行,星号数量会增加1个,对应的前置空格需要减少2个——因为金字塔是对称结构,星号多一个意味着左右两侧的空格各少1个,加起来就是少2个。每次循环后把
k减2,就能让下一行的空格数刚好匹配,保证金字塔始终居中。
2. 为什么使用k = 2 * rows - 2初始化k,而非直接赋值为8?
这么写是为了让代码通用可复用,避免硬编码:
- 当
rows=5时,2*5-2=8,和直接写8效果一样;但如果后续想打印其他行数的金字塔(比如把rows改成6),2*6-2=10,代码会自动算出正确的初始空格数,不用手动修改k的值; - 要是直接写死
k=8,那只有rows=5的时候金字塔是居中的,换其他行数就会错位,这种硬编码的代码灵活性差,维护起来也麻烦。
内容的提问来源于stack exchange,提问作者Thales k
相关产品推荐
相关产品推荐

