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

如何修改Python代码实现算术题横向并排格式化输出?

修正思路与代码实现

要实现算术题横向并排,核心是按行收集所有题目的对应部分,再将每行的各题内容用4个空格连接,最后把所有行拼接起来。你的原代码是逐个生成完整的竖式块并拼接,导致纵向排列,这是主要问题。

修正后的代码

def arithmetic_arranger(problems, solve=False):
    # 初始化四个列表,分别存储每行的内容
    top_lines = []
    operator_lines = []
    dash_lines = []
    result_lines = []

    for problem in problems:
        # 拆分每个算术题的数字和运算符
        num1, op, num2 = problem.split()
        
        # 计算当前题目的宽度:最长数字长度 + 2(运算符+空格)
        width = max(len(num1), len(num2)) + 2
        
        # 生成第一行(第一个数字,右对齐)
        top_lines.append(num1.rjust(width))
        
        # 生成第二行(运算符+第二个数字,右对齐)
        operator_line = f"{op} {num2.rjust(width - 2)}"
        operator_lines.append(operator_line)
        
        # 生成第三行(分隔线)
        dash_lines.append('-' * width)
        
        # 如果需要计算结果,生成第四行
        if solve:
            if op == '+':
                res = int(num1) + int(num2)
            else:
                res = int(num1) - int(num2)
            result_lines.append(str(res).rjust(width))
    
    # 拼接所有行,每行内的题目用4个空格分隔
    output = '\n'.join([
        '    '.join(top_lines),
        '    '.join(operator_lines),
        '    '.join(dash_lines)
    ])
    
    # 如果需要显示结果,追加结果行
    if solve:
        output += '\n' + '    '.join(result_lines)
    
    return output

# 测试示例
print(arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"], True))

关键改进点

  1. 按行收集内容:不再逐个生成竖式块,而是把所有题目的第一行、第二行等分别存入列表,确保横向对齐。
  2. 使用内置对齐方法:用str.rjust(width)直接实现右对齐,替代自定义的strCrt函数,代码更简洁。
  3. 避免变量名冲突:不再使用sum作为变量名(这会覆盖Python内置的sum函数),改用res存储计算结果。
  4. 清晰的行拼接逻辑:用' '.join()将每行的多个题目连接,再用'\n'拼接所有行,实现横向并排效果。

测试输出

运行上述代码后,输出会变为:

32     3801      45     123
+ 698    -    2    + 43    +  49
-----    ------    ----    -----
  730     3799      88     172

内容的提问来源于stack exchange,提问作者Pyneapple

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:00:59