You need to enable JavaScript to run this app. Python如何实现带*边框等边金字塔内部按规则填充$与空格
优惠活动
大模型
产品
解决方案
定价
更多

Python如何实现带*边框等边金字塔内部按规则填充$与空格

实现思路拆解

整个需求可以拆成两个独立模块实现,逻辑非常清晰:

1. 等边三角形的边框轮廓规则

高度为H的等边三角形共H行(行号从上到下从1开始计数),固定轮廓规则为:

  • 第1行(最顶端):仅1个*,左侧留H-1个空格保证整体居中
  • 第H行(最底端):全*组成的三角形底边,总长度为2*H -1,无前置空格
  • 中间行(第2行到第H-1行):左右两个位置为边框*,两个*中间的区域为可填充内部,左侧留H-i个空格保证三角对称。这部分的内部可填充宽度有固定计算公式:2*i -3(i为当前行号)

2. 内部填充的生成逻辑

需求要求内部是连续s个$、连续sp个空格循环排布,不需要逐行判断循环节点,只需要提前生成一个足够长的填充串:

  • 先构造基础重复单元:'$'*s + ' '*sp
  • 根据三角形的最大内部宽度,把基础单元重复足够的次数(向上取整后多重复1次做保险),后续每一行需要多长的填充内容,直接从这个长串里切对应长度的片段即可,逻辑非常简单

可运行参考代码

# 读取输入参数
tri_height = int(input("输入三角形高度:"))
dollar_count = int(input("输入连续'$'的数量:"))
space_count = int(input("输入连续空格数量:"))

# 构造基础填充单元:连续$ + 连续空格
fill_unit = '$' * dollar_count + ' ' * space_count
unit_len = len(fill_unit)

# 动态计算需要的填充总长度,避免内容截断
max_inner_width = 2 * tri_height - 5
repeat_times = (max_inner_width + unit_len - 1) // unit_len + 1
fill_long = fill_unit * repeat_times

# 逐行打印
for row in range(1, tri_height + 1):
    if row == 1:
        # 输出顶行:居中的单个*
        print(' ' * (tri_height - row) + '*')
    elif row == tri_height:
        # 输出底行:全*的三角形底边
        print('*' * (2 * tri_height - 1))
    else:
        # 计算当前行的内部可填充宽度
        current_inner_width = 2 * row - 3
        # 截取对应长度的填充内容
        inner_content = fill_long[:current_inner_width]
        # 拼接整行:左侧对齐空格 + 左边框* + 内部内容 + 右边框*
        line = ' ' * (tri_height - row) + '*' + inner_content + '*'
        print(line)

效果验证说明

用你给出的示例参数(三角形高度9、连续$数5、连续空格数2)测试时:

  • 基础填充单元为'$$$$$ '(5个$加2个空格,长度7)
  • 逐行计算填充长度,从顶部1个字符、逐行增加2个,到底部上一行的13个字符,全程不会出现填充截断,输出的三角轮廓对称,内部的$和空格按连续块循环排布,符合作业要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 21:36:04