多列输出函数 《python 核心编程》习题6-19

多列输出函数 《python 核心编程》习题6-19

多列输出

有任意项的序列或其他容器,把它们等距离分列显示。由调用者提供数据和输出格式。

例如,如果你传入100个项并定义3列输出,按照需要的模式并显示这些数据。这种情况下应该是两列显示33个项,最后一列显示34个。

你可以让用户选择水平排序或者垂直排序

代码

"""
    多列输出函数,如果不能刚好排下则排到后面的几列
    如101项 按 3 列输出,则第一列为33个,第二列和第三列为34个
"""
#   @Time:  2016/12/21 11:35
#   @Author:still_night@163.com
#   @File:  t6_19.py


def print_table(container, column_count=1,row_sort=True ):
    """ 按照指定列数输出一个可遍历容器
    container: 容器
    column_count: 列数
    row_sort: {True:按行排序 | False:按列排序} """
    lens = len(container)               # 容器的长度
    row_count = lens // column_count    # 全部填满的行数
    tail=lens%column_count              # 最后留下的小尾巴的数量
    spaces = column_count -tail         # 最后一行的空位数量

    if row_sort:
        for i in range(lens-tail):      # 先把满的行输出
            print("%10d"%container[i],end="")
            if i%column_count==column_count-1:
                print("\n",end="")
        for i in range(spaces):         # 输出最后一行的空格
            print("%10s"%"",end="")
        for i in range(lens-tail,lens): # 输出最后一行剩下的数
            print("%10d" % container[i], end="")
        print("\n",end="")

    else:
        strings=["" for r in range(row_count+1)]    # 定义一个列表存储每行的输出
        i=0
        r=0
        # 本算法顺次遍历每一列,然后判断如果为最后一行并且还有没输出的空格就输出空格

        spaces = column_count - tail                # 存储最后一行的空格数
        while i<lens:                              # 遍历每一个元素
            if r==row_count and spaces:            # 如果是最后一行且还有没输出的空格
                strings[r]+="%10s"%""               # 在最后一行输出空格
                spaces-=1                           # 未输出的空格数量-1
            else:
                strings[r]+="%10d"%container[i]     # 如果不是最后一行或者空格已经输出完毕,正常输出
                i+=1                                # 移动到下一个
            r+=1                                    # 移动到下一列
            if r==row_count+1:                      # 如果列数已经超出限制,返回第一列
                r=0
        print("\n".join(strings))

样例:

print_table(range(103),7,True)
用7列 按行排序,输出0-102 共103个数字

     0         1         2         3         4         5         6
     7         8         9        10        11        12        13
    14        15        16        17        18        19        20
    21        22        23        24        25        26        27
    28        29        30        31        32        33        34
    35        36        37        38        39        40        41
    42        43        44        45        46        47        48
    49        50        51        52        53        54        55
    56        57        58        59        60        61        62
    63        64        65        66        67        68        69
    70        71        72        73        74        75        76
    77        78        79        80        81        82        83
    84        85        86        87        88        89        90
    91        92        93        94        95        96        97
                        98        99       100       101       102



print_table(range(102), 7, False)
# 用7列,按列排序 输出 0-101 共102个数字

     0        14        28        42        57        72        87
     1        15        29        43        58        73        88
     2        16        30        44        59        74        89
     3        17        31        45        60        75        90
     4        18        32        46        61        76        91
     5        19        33        47        62        77        92
     6        20        34        48        63        78        93
     7        21        35        49        64        79        94
     8        22        36        50        65        80        95
     9        23        37        51        66        81        96
    10        24        38        52        67        82        97
    11        25        39        53        68        83        98
    12        26        40        54        69        84        99
    13        27        41        55        70        85       100
                                  56        71        86       101
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页