python菜鸟聪带你一起学 《python编程快速上手 让繁琐的工作自动化》之 6.7 实践项目—表格打印...

项目要求:编写一个名为 printTable()的函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐。

tableData = [['apples', 'oranges', 'cherries', 'banana'],['Alice', 'Bob', 'Carol', 'David'],['dogs', 'cats', 'moose', 'goose']]

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

个人设计逻辑(仅供参考,有更好的欢迎指出)

首先该列表是复合列表,要求的输出形式可以看出同一行是tableData[0][0],tableData[1][0],tableData[2][0]以此类推,所以肯定会有一个复合循环,为了简单点我选取两个for循环,其中外循环是第二个下标,内循环是第一个下标。并且只有每一次内循环完成后外循环结束当次循环在显示时才进行换行,因此代码如下:

for num_1 in range(0, 4):
    for num_0 in range(0, 3):
        print(table[num_0][num_1].rjust(),end=' ')
    print('\n',end='')

接下来分析打印的内容,由于打印形式都是右对齐,因此需要找到每一个子列表中字符最长的字符长度值,因此需要一个用于存放子字符列表各个字符长度的列表然后再用max函数求出该子字符列表的字符最长的值,因为每一次内循环(本文中外循环指的是最表层列表的for循环,内循环指的是子列表的for循环)都需要用到存放字符长度值的列表,因此在每一次外循环开始前都要把该列表清空不然假设有一个字符的长度是所有字符中最长的,那返回的字符长度的最大值就永远只有一个。同样的循环也是复合循环,代码如下

compare_0 = []  # 创建用于存储子字符列表长度的值的列表
compare_0_max_lst = []  # 创建用于存储每个子字符列表中最长字符长度的列表
for i_0 in table:
    for i_1 in i_0:
        compare_0.append(len(i_1))  # 添加子字符列表长度的值到compare_0列表中
    compare_0_max_lst.append(max(compare_0))  # 添加最长字符长度的值到compare_0_max_lst列表中
    compare_0.clear()  # 将compare_0列表清零

找到相应的列的最大字符长度后,就是解决格式问题,即rjust函数,现在还缺少把每一列最长字符的长度值赋给rjust函数即可,因此代码如下:

print(table[num_0][num_1].rjust(compare_0_max_lst[num_0]),end=' ')

最后定义下功能函数模块,整个完整代码如下:

#! python
# -*- coding:utf-8 -*-
# Author:Tom Chen


def sheet_print(table):
    compare_0 = []  # 创建用于存储子字符列表长度的值的列表
    compare_0_max_lst = []  # 创建用于存储每个子字符列表中最长字符长度的列表
    for i_0 in table:
        for i_1 in i_0:
            compare_0.append(len(i_1))  # 添加子字符列表长度的值到compare_0列表中
        compare_0_max_lst.append(max(compare_0))  # 添加最长字符长度的值到compare_0_max_lst列表中
        compare_0.clear()  # 将compare_0列表清零

    for num_1 in range(0, 4):
        for num_0 in range(0, 3):
            print(table[num_0][num_1].rjust(compare_0_max_lst[num_0]),end=' ')
        print('\n',end='')


tableData = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]
sheet_print(tableData)

每天学习一小步,生活容易一大步,python菜鸟聪与你共勉!!!

转载于:https://my.oschina.net/u/3998861/blog/2250225

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值