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

来源:互联网 发布:头像卡通化软件 编辑:程序博客网 时间:2024/05/29 13:21

多列输出函数 《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.pydef 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       102print_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
0 0