如何并排打印列表项且不改变输出结构?Python算术排版问题
修正算术表达式横向排版的Python函数
原来的函数会将每个算术表达式纵向单独输出,要实现横向排列的目标,我们需要把所有表达式的第一行、运算符行、分隔线分别对齐到同一行,具体修改如下:
def arithmetic_arranger(my_list): top_lines = [] middle_lines = [] bottom_lines = [] for expr in my_list: num1, op, num2 = expr.split() # 计算每个表达式的总宽度:最长数字长度 + 2(运算符和一个空格) width = max(len(num1), len(num2)) + 2 # 格式化第一行:数字右对齐 top = f"{num1:>{width}}" # 格式化第二行:运算符+空格,搭配右对齐的第二个数字 middle = f"{op} {num2:>{width - 2}}" # 生成对应宽度的分隔线 bottom = '-' * width top_lines.append(top) middle_lines.append(middle) bottom_lines.append(bottom) # 用四个空格分隔每个表达式块,逐行打印 print(' '.join(top_lines)) print(' '.join(middle_lines)) print(' '.join(bottom_lines)) arithmetic_arranger(["32 + 8", "1 - 3801", "9999 + 9999", "523 - 49"])
关键修改说明
- 拆分存储逻辑:用三个独立列表分别存储所有表达式的第一行、运算符行、分隔线,确保同一行内容可以统一拼接。
- 简化对齐逻辑:利用f-string的右对齐格式化语法
{content:>{width}},替代手动计算空格的复杂操作,排版更精准。 - 横向拼接输出:通过
' '.join()将每行的所有表达式块用四个空格连接,实现横向排列的效果。
运行后输出与期望一致:
32 1 9999 523 + 8 - 3801 + 9999 - 49 ---- ------ ------ -----
内容的提问来源于stack exchange,提问作者TheBlindOwl
相关产品推荐
相关产品推荐

