You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python右金字塔形字符串打印的替代实现方法咨询

几种实现字符串右金字塔打印的方法

你的代码逻辑清晰,完全能实现需求,这里再给你几种不同思路的实现方法,帮你拓展Python的写法思路:

方法1:单循环覆盖所有行

通过计算每一行对应的子串长度,用一个循环完成所有行的打印,无需拆分递增和递减两个循环。

string = 'python'
n = len(string)
# 总共有 2*n -1 行
for i in range(2 * n - 1):
    # 计算当前行需要打印的子串长度:和中间行的距离越近,长度越长
    current_length = n - abs(n - 1 - i)
    print(string[:current_length])

思路说明:中间最长的那行是第n-1个索引(从0开始),用abs(n-1 -i)算出当前行和中间行的距离,总长度n减去这个距离,就得到当前要打印的子串长度,一次循环就能搞定所有行。

方法2:递归实现

利用递归的“先递后归”特性,先打印递增的部分,再在递归返回时打印递减的部分。

def print_pyramid(s, current_len):
    if current_len <= len(s):
        # 先打印当前长度的子串
        print(s[:current_len])
        # 递归调用,长度+1,处理下一行
        print_pyramid(s, current_len + 1)
        # 递归返回时,打印递减的部分(跳过最长的那行,避免重复)
        if current_len != len(s):
            print(s[:current_len])

string = 'python'
print_pyramid(string, 1)

思路说明:递归函数先从长度1开始,逐步递推到最长长度n,打印所有递增行;当递推到最长长度后,开始回溯,依次打印长度n-1到1的子串,实现递减部分。

方法3:列表生成式预存所有行

先通过列表生成式把所有要打印的行都生成出来,再统一遍历打印,代码更简洁。

string = 'python'
n = len(string)
# 生成递增行:['p', 'py', ..., 'python']
increasing_lines = [string[:i+1] for i in range(n)]
# 生成递减行:['pytho', 'pyth', ..., 'p'](跳过最长的行)
decreasing_lines = [string[:n - i - 1] for i in range(n-1)]
# 合并后打印所有行
for line in increasing_lines + decreasing_lines:
    print(line)

思路说明:用列表生成式分别生成递增和递减的行集合,合并后遍历打印,把“生成内容”和“打印”的逻辑分开,可读性更强。

方法4:调整递减循环的索引逻辑

和你的原代码思路类似,但调整递减部分的索引方式,让逻辑和递增部分更统一,更直观。

string = 'python'
n = len(string)
# 递增部分:从1到n长度的子串
for i in range(n):
    print(string[:i+1])
# 递减部分:从n-1到1长度的子串
for i in range(n-2, -1, -1):
    print(string[:i+1])

思路说明:原代码递减部分用string[:-(i+1)]取子串,这里直接用range(n-2, -1, -1)拿到从n-2到0的索引,每次取前i+1个字符,和递增部分的取法保持一致,更容易理解。

内容的提问来源于stack exchange,提问作者Pynewbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:55:19