项目要求:编写一个名为 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菜鸟聪与你共勉!!!