如何使用print函数构造波浪结构 偶数位为正斜率奇数位为负斜率
波浪结构打印实现思路
基础规则
- 输入为一串数字,按数位的奇偶性决定每一步的斜率方向
- 偶数位对应正斜率:对应字符的竖直位置逐列向上偏移
- 奇数位对应负斜率:对应字符的竖直位置逐列向下偏移
实现思路
仅需四步即可完成打印,不需要依赖复杂第三方库:
- 第一步计算画布高度:先遍历一遍所有数字,模拟走一遍完整路径,记录竖直方向的最大、最小偏移值,总高度就是最大值减最小值加1,避免打印时内容被截断
- 第二步初始化空画布:创建一个二维列表,行数是刚才算出来的总高度,列数等于输入数字的长度,所有位置初始填充空格
- 第三步逐列填充内容:初始竖直坐标设为偏移后的中间位置,从左到右遍历每一位数字,把数字填到当前坐标的对应位置,之后根据数字奇偶性调整竖直坐标:偶数减1(向上走),奇数加1(向下走)
- 第四步逐行输出:遍历二维列表的每一行,把每行的字符拼接成完整字符串,直接调用
print()输出即可
参考代码(Python)
def print_wave(num_sequence: str): # 先计算路径的竖直坐标范围 current_y, min_y, max_y = 0, 0, 0 for num_char in num_sequence: current_y += -1 if int(num_char) % 2 == 0 else 1 min_y = min(min_y, current_y) max_y = max(max_y, current_y) # 初始化画布 total_rows = max_y - min_y + 1 canvas = [[' ']*len(num_sequence) for _ in range(total_rows)] # 填充内容 current_y = -min_y # 把初始位置对齐到画布的合适位置,避免出现负索引 for col_idx, num_char in enumerate(num_sequence): canvas[current_y][col_idx] = num_char current_y += -1 if int(num_char) % 2 == 0 else 1 # 逐行打印 for row in canvas: print(''.join(row)) # 测试用例 if __name__ == "__main__": print_wave("123456789")
内容的提问来源于stack exchange,提问作者Albus
相关产品推荐
相关产品推荐

