Python竖向排列算术竖式时如何正确对齐多行字符串
问题原因
你当前排版错位的核心逻辑错误:你将每道竖式的多行内容用换行符拼接成单个字符串存入列表,直接横向拼接多个带换行符的字符串时,仅第一组内容会按横向排列,一旦遇到换行符,后续内容会直接跳到输出流的最左侧,完全不会保留横向分栏的对齐结构。
正确实现思路
不要按「单道题为一个存储单元」拼接,改为按输出的行维度聚合内容:
- 先给每道题计算固定的输出宽度:取两个运算数的最大长度+2(预留运算符和前置空格的位置)
- 单道题的4行内容(第一运算数行、运算符+第二运算数行、分隔横线行、结果行)全部按固定宽度右对齐
- 把所有题的同层级行内容收集到同一个列表中,题与题之间用4个空格作为间隔拼接成一整行
- 最后把4个整行用换行符拼接后输出,就能实现完全对齐的效果
可直接运行的参考代码
def arithmetic_arranger(problems, show_result=True): top_line = [] mid_line = [] dash_line = [] res_line = [] for prob in problems: num1, op, num2 = prob.split() # 计算单题列宽度 col_width = max(len(num1), len(num2)) + 2 # 逐行生成对齐后的内容 top_line.append(num1.rjust(col_width)) mid_line.append(f"{op}{num2.rjust(col_width - 1)}") dash_line.append("-" * col_width) # 计算运算结果 calc_res = int(num1) + int(num2) if op == "+" else int(num1) - int(num2) res_line.append(str(calc_res).rjust(col_width)) # 按行拼接,题与题之间留4个空格间隔 gap = " " output = [ gap.join(top_line), gap.join(mid_line), gap.join(dash_line) ] if show_result: output.append(gap.join(res_line)) return "\n".join(output) # 测试用例 test_problems = ["32 + 8", "1 - 3801", "9999 + 9999", "523 - 49"] print(arithmetic_arranger(test_problems))
运行效果
32 1 9999 523 + 8 - 3801 + 9999 - 49 ---- ------ ------ ----- 40 -3800 19998 474
内容的提问来源于stack exchange,提问作者Alexander_M
相关产品推荐
相关产品推荐

