如何修改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))
关键改进点
- 按行收集内容:不再逐个生成竖式块,而是把所有题目的第一行、第二行等分别存入列表,确保横向对齐。
- 使用内置对齐方法:用
str.rjust(width)直接实现右对齐,替代自定义的strCrt函数,代码更简洁。 - 避免变量名冲突:不再使用
sum作为变量名(这会覆盖Python内置的sum函数),改用res存储计算结果。 - 清晰的行拼接逻辑:用
' '.join()将每行的多个题目连接,再用'\n'拼接所有行,实现横向并排效果。
测试输出
运行上述代码后,输出会变为:
32 3801 45 123 + 698 - 2 + 43 + 49 ----- ------ ---- ----- 730 3799 88 172
内容的提问来源于stack exchange,提问作者Pyneapple
相关产品推荐
相关产品推荐

