题目:
编号一个函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐。假定所有内层列表都包含同样数目的字符串。例如:该值可能看起来像这样:
tabledata = [[‘apples’, ‘oranges’, ‘cherries’, ‘banana’], [‘Alice’, ‘Bob’, ‘Carol’, ‘David’],[‘dogs’, ‘cats’, ‘moose’, ‘goose’]]
解答:
def getdata(tbldata):
num = []
nlen = 0
for i in range(len(tbldata)):
tbldatashort = tbldata[i]
for j in range(len(tbldatashort)):
num.append(tbldatashort[j])
newlen = len(tbldatashort[j])
if nlen < newlen :
nlen = newlen
return num,nlen+3
def datachange(tabledata) :
tbl = tabledata
datanum = len(tbl)
lie = (3,4,5)
for i in range(len(lie)):
if datanum % lie[i] == 0 :
return lie[i]
def dataprint(tbl,lie,nlen):
h = 0
m = 0
while h < lie :
if h == lie -1 :
print(tbl[m].rjust(nlen))
h = 0
else :
print(tbl[m].rjust(nlen),end='')
h += 1
if m == len(tbl)-1 :
break
else :
m += 1
tabledata = [['apples', 'oranges', 'cherries', 'banana'], ['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
tbl,nlen = getdata(tabledata)
lie = datachange(tbl)
dataprint(tbl,lie,nlen)
上面的解答中,假设了排列为3列、4列、5列都可以,按3、4、5列的优先顺序,能用几列能刚好排完就排成几列。
结果如下:
抱歉了,随着学习进度,回过头来检查中发现原来上面的结果是错误的,经修改后的代码如下:
def dataprint(tbldata) :
# 先找到最长的字符串
lenmax = 0 #长度初始值
for i in range(len(tbldata)) :
for j in tbldata[i] :
if len(j) > lenmax :
lenmax = len(j)
lenmax += 10 #为了两个字符串中间有间隙,把长度加长10
for i in range(len(tbldata[0])) :
for j in range(len(tbldata)) :
if j < len(tbldata)-1 : # len(tbldata)的结果是3
print(tbldata[j][i].rjust(lenmax),end='') # end=''是不换行
else :
print(tbldata[j][i].rjust(lenmax))
tabledata = [['apples', 'oranges', 'cherries', 'banana'], ['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
dataprint(tabledata)
此次输出结果如下: