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

如何用Python的列表与循环打印指定样式的三角形?

解决打印指定样式三角形的问题

首先先明确你要的目标输出(当n=5时):

* 
*+* 
*+++* 
*+++++* 
*********

再看看你现在的代码运行结果是左对齐的递增星号,和目标样式不符,问题出在这几个地方:

  • 你保留了前置空格的循环,但目标样式是左对齐的,不需要前面的空白;
  • 代码里只打印了星号,没有处理中间需要的加号;
  • 最后一行需要全星号的特殊情况也没考虑到。

我给你调整后的代码,直接就能得到想要的效果:

n = 5
for x in range(n):
    # 计算当前行的总字符数:第x行(从0开始)长度为2x+1
    total_chars = 2 * x + 1
    if x == n - 1:
        # 最后一行全部打印星号
        print('*' * total_chars)
    else:
        # 非最后一行:首尾是星号,中间填充对应数量的加号
        middle_part = '+' * (total_chars - 2)
        print(f'*{middle_part}*')

代码解释:

  • 去掉了原来的前置空格循环:因为目标样式是左对齐的,不需要前面的空白字符;
  • 每行总长度计算:2*x+1 对应第0行1个字符、第1行3个字符……直到第4行(最后一行)9个字符,完全匹配目标的行数长度;
  • 分情况处理:
    • 最后一行直接用字符串乘法生成全星号;
    • 其他行先打开头的星号,中间填充总长度-2个加号(减去首尾两个星号的位置),最后打结尾的星号。

如果你更喜欢用嵌套循环的方式(更直观理解每一步的打印),也可以用这段代码:

n = 5
for x in range(n):
    total_length = 2 * x + 1
    if x == n - 1:
        # 最后一行循环打印星号
        for _ in range(total_length):
            print('*', end='')
    else:
        # 先打印开头的星号
        print('*', end='')
        # 中间循环打印加号
        for _ in range(total_length - 2):
            print('+', end='')
        # 最后打印结尾的星号
        print('*', end='')
    # 每行结束换行
    print()

运行这段代码也能得到你想要的三角形样式啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:23