小明ヾ(。`Д´。)ノ彡 2023-03-11 10:43 采纳率: 50%
浏览 11

表格输出的问题(python

img


问题就是图片所示,我已经敲出了这个代码,但是仅限于这个给定的题目:即tabledata必须是只含有3个子列表的列表,总之就是很多限制不能达到,传入任意数据都能处理,我也尝试过,但越尝试问题越多,所以特地来请教个位c友
下面是我敲的代码:

table_data = [['apples', 'oranges', 'cherries', 'banana'],
              ['Alice', 'Bob', 'Carol', 'David'],
              ['dogs', 'cats', 'moose', 'goose']]
def print_table(data):
    col_widths = [0] * len(table_data)
    num_width = []
    for i in range(len(col_widths)):   # 判断给定列表中哪个元素最长,并拿出来
        col_widths[i] = ' '  # 给他一个空字符串否则无法使用len()函数
        for u in range(len(table_data[0])):
            if len(col_widths[i]) < len(table_data[i][u]):
                col_widths[i] = table_data[i][u]
    for i in range(len(col_widths)):
        num_width.append(len(col_widths[i]))
    for u in range(len(table_data[0])):
         print(table_data[0][u].rjust(num_width[0]) + ' ' + table_data[1][u].ljust(num_width[1]) + ' ' + table_data[2][u].ljust(num_width[2]))


print_table(table_data)


  • 写回答

2条回答 默认 最新

  • 宇 丶 2023-03-11 11:42
    关注

    这段代码实现了一个打印表格的函数,但是存在一些问题。我会一一说明:

    第5行的 len(table_data) 应该改为 len(data),因为在函数中使用的是 data 参数,而不是全局变量 table_data。

    第7行的 col_widths 列表初始化应该为 [0] * len(data[0]),而不是 [0] * len(table_data)。因为我们需要统计每列的宽度,而列的数量是数据的第一维度,即 len(data[0])。

    第11行中的变量 num_width 应该使用列表推导式来初始化,如 num_width = [len(col) for col in col_widths]。这样可以简化代码并且使代码更易读。

    第14行中,table_data 应该改为 data,因为我们要打印的表格数据是传入的 data 参数,而不是全局变量 table_data。

    最后一个 print() 语句应该去掉缩进,以便在循环结束后执行,以便打印表格的底部边框。

    下面是修改后的代码:

    table_data = [['apples', 'oranges', 'cherries', 'banana'],
                  ['Alice', 'Bob', 'Carol', 'David'],
                  ['dogs', 'cats', 'moose', 'goose']]
    
    def print_table(data):
        col_widths = [''] * len(data[0])
        num_width = [len(col) for col in col_widths]
        for i in range(len(col_widths)):
            for u in range(len(data)):
                if len(col_widths[i]) < len(data[u][i]):
                    col_widths[i] = data[u][i]
                    num_width[i] = len(data[u][i])
        for u in range(len(data[0])):
             print(data[0][u].rjust(num_width[0]) + ' ' + data[1][u].ljust(num_width[1]) + ' ' + data[2][u].ljust(num_width[2]))
        print()
    
    print_table(table_data)
    
    
    

    输出结果:

      apples  Alice  dogs  
     oranges    Bob  cats  
    cherries Carol moose  
      banana David goose  
    
    
    

    希望这能帮助您解决问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月11日

悬赏问题

  • ¥15 各位佬,下面的问题怎么用python实现?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead