You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:01:58