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

Python算术格式化函数代码问题:仅返回最后一道算术题结果

问题排查与修复

你遇到的核心问题是循环内部重复赋值覆盖了之前的结果,加上初始字符串设置错误,导致最终只保留最后一道题的内容。下面是具体问题和修复方案:

核心问题分析

  1. 结果变量被循环覆盖:你在for循环内部每次都重新赋值arranged_problems,之前循环拼接的line1-line4内容会被最后一次循环的结果完全覆盖,所以最终只返回最后一道题。
  2. 初始字符串多余空格:line1 = " "这类初始值带空格,会导致每一行开头多一个不必要的空格,破坏格式。
  3. 错误处理不符合要求:原代码用print输出错误,但项目要求函数返回错误字符串而非打印,且错误出现后应终止函数执行,避免继续处理后续问题。

修复后的代码

def arithmetic_arranger(problems, show=False):
    # 最多允许5道题
    if len(problems) > 5:
        return 'Error: Too many problems.'
    
    line1 = ""
    line2 = ""
    line3 = ""
    line4 = ""
    
    for p in problems:
        problem = p.split()
        fnumber = problem[0]
        operator = problem[1]
        snumber = problem[2]
        
        # 运算符只能是+或-
        if operator not in ('+', '-'):
            return "Error: Operator must be '+' or '-'."
        
        # 数字不能超过4位
        if len(fnumber) > 4 or len(snumber) > 4:
            return 'Error: Numbers cannot be more than four digits.'
        
        # 验证数字是否仅含数字字符
        try:
            fnumber_int = int(fnumber)
            snumber_int = int(snumber)
        except ValueError:
            return 'Error: Numbers must only contain digits.'
        
        # 计算最长数字长度,确定对齐宽度
        longest_len = max(len(fnumber), len(snumber))
        align_width = longest_len + 2
        
        # 计算答案
        if operator == '+':
            answer = fnumber_int + snumber_int
        else:
            answer = fnumber_int - snumber_int
        
        # 拼接每一行内容,最后一个问题不加多余空格
        if p != problems[-1]:
            line1 += fnumber.rjust(align_width) + '    '
            line2 += operator + snumber.rjust(align_width - 1) + '    '
            line3 += '-' * align_width + '    '
            line4 += str(answer).rjust(align_width) + '    '
        else:
            line1 += fnumber.rjust(align_width)
            line2 += operator + snumber.rjust(align_width - 1)
            line3 += '-' * align_width
            line4 += str(answer).rjust(align_width)
    
    # 循环结束后再组装最终结果
    if show:
        arranged_problems = f"{line1}\n{line2}\n{line3}\n{line4}"
    else:
        arranged_problems = f"{line1}\n{line2}\n{line3}"
    
    return arranged_problems

关键修改点

  • 将arranged_problems的赋值移到循环外部,循环只负责逐题拼接line1-line4的内容,避免每次循环覆盖结果。
  • 把初始的line1 = " "改为空字符串line1 = "",消除开头多余空格。
  • 错误处理从print改为return,符合项目要求,且错误出现后立即终止函数。
  • 处理最后一道题时不再添加末尾的4个空格,避免格式冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:35:03