python编程快速上手 第六章实践项目练习(更新1,修正错误)

题目:
编号一个函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐。假定所有内层列表都包含同样数目的字符串。例如:该值可能看起来像这样:
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)

此次输出结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值