Python算术格式化函数代码问题:仅返回最后一道算术题结果
问题排查与修复
你遇到的核心问题是循环内部重复赋值覆盖了之前的结果,加上初始字符串设置错误,导致最终只保留最后一道题的内容。下面是具体问题和修复方案:
核心问题分析
- 结果变量被循环覆盖:你在
for循环内部每次都重新赋值arranged_problems,之前循环拼接的line1-line4内容会被最后一次循环的结果完全覆盖,所以最终只返回最后一道题。 - 初始字符串多余空格:
line1 = " "这类初始值带空格,会导致每一行开头多一个不必要的空格,破坏格式。 - 错误处理不符合要求:原代码用
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
相关产品推荐
相关产品推荐

