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
相关产品推荐
相关产品推荐

