如何基于width、height、depth参数格式化输出指定字符串?
问题需求
编写函数,根据指定的宽度(width)、高度(height)和深度(depth)参数,格式化输出给定字符串:
- depth代表输出的“块”数量,每个块是width×height的字符矩阵
- 块与块之间用空行分隔
示例:
输入字符串为 .X.XXX.X..v.vXv.v.,指定width=3、height=3、depth=2时,输出如下:
.X. XXX .X. .v. vXv .v.
我的错误尝试
以下代码无法正常工作:
def print_string(s, w, h, d): for i in range (0, int(len(s)/D), w): print (s[i:i+w]) for i in range(0, len(s), D): print (“ “) for i in range (int(len(s)/D), len(s), w): print(s[i:i+w])
正确实现方案
逻辑分析
每个块的字符总数是 width × height,总字符串长度需等于 width × height × depth。核心思路是按块拆分字符串,每个块内再按宽度拆分成行输出,块间添加空行分隔。
代码实现
def print_formatted_string(s, width, height, depth): block_size = width * height # 可选:校验字符串长度是否符合参数要求 if len(s) != block_size * depth: raise ValueError("字符串长度与指定的width、height、depth不匹配") for block_idx in range(depth): # 截取当前块的内容 block_start = block_idx * block_size current_block = s[block_start:block_start + block_size] # 逐行输出当前块 for line_idx in range(height): line_start = line_idx * width print(current_block[line_start:line_start + width]) # 块间添加空行(最后一个块不添加) if block_idx != depth - 1: print()
代码说明
- 先计算单个块的字符长度
block_size,可选校验字符串长度是否与参数匹配 - 循环遍历每个块,通过索引定位并截取当前块的子字符串
- 在每个块内部,按高度循环,每次截取
width长度的子串作为一行输出 - 除最后一个块外,每个块输出完成后打印空行,实现块间分隔
内容的提问来源于stack exchange,提问作者Iplaysoccer
相关产品推荐
相关产品推荐

