鱼C论坛

 找回密码
 立即注册
楼主: ckblt

[作品展示] 【Python】命令行表格渲染器

[复制链接]
发表于 2022-1-30 14:57:00 | 显示全部楼层
总之你自己试试,负号是偏移了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 14:57:33 | 显示全部楼层
我这里不知道为什么?打不出这种效果!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 14:59:10 | 显示全部楼层
你将 list1 设置为:
  1. list1 = [[-2,-1213214234523543523625362,0],[1342,2,3],[234,5,6]]
复制代码

负号偏移的效果更严重!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-30 15:07:45 | 显示全部楼层
负号偏移了吗,什么意思
  1. -2                            -1213214234523543523625362    0
  2. 1342                          2                             3
  3. 234                           5                             6
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-30 15:08:41 | 显示全部楼层
python爱好者. 发表于 2022-1-30 14:59
你将 list1 设置为:

负号偏移的效果更严重!!!

可能是你命令行太小了吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:11:43 | 显示全部楼层
我重试了一下,好像确实没问题,但是......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:12:25 | 显示全部楼层
还是有个 BUG:
你将 list1 设为:
  1. list1 = [[-2,-121321423243434,0],[1342,2789879798798,3],[234,59789798,6]]
复制代码

就会严重便宜了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-30 15:13:35 | 显示全部楼层
  1. -2                  -121321423243434    0
  2. 1342                2789879798798       3
  3. 234                 59789798            6
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-30 15:14:10 | 显示全部楼层
python爱好者. 发表于 2022-1-30 15:12
还是有个 BUG:
你将 list1 设为:

有没有截图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:16:39 | 显示全部楼层
9DA0EDEA-51D2-4C5F-BB7B-A7F2E3AB5866.jpeg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-30 15:18:53 | 显示全部楼层
是不是空格偏移?

可能是你空格数多,我空格数少

评分

参与人数 1鱼币 +5 收起 理由
python爱好者. + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-30 15:20:05 | 显示全部楼层
哦,我数了数,对的!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:25:04 | 显示全部楼层
我又更新了一下我的,现在可以输出方形的了:
  1. list1 = [[-2,-1,0],[1,2,3],[4,5,6]]
  2. space = 5
  3. string = ""
  4. space_with_number = (len(str(max([each for each_row in list1 for each in each_row],key = lambda x:len(str(x)))))) * 2 + space
  5. space = []
  6. for i in range(len(list1)):

  7.     space.append([int(space_with_number - len(each)) for each in [each_row for each_row in (" ".join([str(each) for each in [each for each_row in list1 for each in each_row][len([each for each_row in list1[:i + 1] for each in each_row]) - len(list1[i]):len([each for each_row in list1[:i + 1] for each in each_row])]]).split())]])
  8. space = [each for each_line in space for each in each_line]
  9. value = [str(each) for each_line in list1 for each in each_line]
  10. spacer = (space_with_number - len(list1)) // (len(list1) - 1)
  11. i = 0
  12. for x in zip(value,space):
  13.     if i % 3 == 0:
  14.         print(spacer * "\n")
  15.     print(x[0] + x[1] * " ",end = "")
  16.     i += 1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-30 15:25:35 | 显示全部楼层
其实就是加了个 spacer 变量而已。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:29:29 | 显示全部楼层
你也试试?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-30 15:29:42 | 显示全部楼层
python爱好者. 发表于 2022-1-30 15:25
我又更新了一下我的,现在可以输出方形的了:

可以,不过打印之前会空几行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:30:34 | 显示全部楼层
让我想亿会儿
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:31:24 | 显示全部楼层
现在好了:
  1. list1 = [[-221312,-1,0],[1,2234,3],[4,2342342345,6]]
  2. space = 15
  3. string = ""
  4. space_with_number = (len(str(max([each for each_row in list1 for each in each_row],key = lambda x:len(str(x)))))) * 2 + space
  5. space = []
  6. for i in range(len(list1)):

  7.     space.append([int(space_with_number - len(each)) for each in [each_row for each_row in (" ".join([str(each) for each in [each for each_row in list1 for each in each_row][len([each for each_row in list1[:i + 1] for each in each_row]) - len(list1[i]):len([each for each_row in list1[:i + 1] for each in each_row])]]).split())]])
  8. space = [each for each_line in space for each in each_line]
  9. value = [str(each) for each_line in list1 for each in each_line]
  10. spacer = (space_with_number - len(list1)) // (len(list1) - 1)
  11. i = 1
  12. for x in zip(value,space):
  13.     if i % 4 == 0:
  14.         print(spacer * "\n")
  15.     print(x[0] + x[1] * " ",end = "")
  16.     i += 1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-30 15:31:54 | 显示全部楼层
改了一下 i 变量,从 0 改成了 1.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-30 15:32:19 | 显示全部楼层
  1. from typing import Union


  2. def no_list_list(
  3.     x: Union[list, tuple, set], no_tuples: bool = False, no_sets: bool = False
  4. ) -> list:
  5.     """
  6.     禁止列表套娃函数(使用递归)
  7.     返回值: 列表

  8.     ### 参数:

  9.     x: 套娃的 列表 | 元组 | 集合
  10.     no_tuples: 禁止元组套娃
  11.     no_sets: 禁止集合套娃

  12.     ### 例子:

  13.     ```
  14.     no_list_list( [ [ [ 1, 2, 3, 4, 5 ] ] ] )
  15.     [1, 2, 3, 4, 5]

  16.     no_list_list( [ [ [ 1, 2, 3, 4, 5 ], 6 ], 7 ] )
  17.     [1, 2, 3, 4, 5, 6, 7]
  18.     ```
  19.     """

  20.     new_list = []

  21.     for i in x:
  22.         if (
  23.             (isinstance(i, list))
  24.             or (no_tuples and isinstance(i, tuple))
  25.             or (no_sets and isinstance(i, set))
  26.         ):
  27.             new_list.extend(no_list_list(i, no_tuples, no_sets))
  28.         else:
  29.             new_list.append(i)

  30.     return new_list


  31. class Table:
  32.     """
  33.     初始化 Table
  34.     """

  35.     def __init__(self, table: list):
  36.         self.table = table
  37.         self.length = len(self.table[0]), len(self.table)
  38.         self.__check()

  39.     """
  40.     检查 self.table 是否合法
  41.     """

  42.     def __check(self):
  43.         temp = set([len(x) for x in self.table])
  44.         if len(temp) != 1:
  45.             raise Exception()

  46.     """
  47.     渲染 self.table
  48.     """

  49.     def render(self):
  50.         col_spaces = 4
  51.         l = no_list_list(self.table)
  52.         rendered = ""

  53.         # 每列之间的空,存储到 col_spaces
  54.         for i in l:
  55.             if len(str(i)) > col_spaces - 4:
  56.                 col_spaces = len(str(i)) + 4

  57.         # 正式渲染
  58.         for i_i in range(len(self.table)):
  59.             i = self.table[i_i]
  60.             for j in i:
  61.                 rendered += str(j) + " " * (col_spaces - len(str(j)))
  62.             if i_i != len(self.table) - 1:
  63.                 rendered += "\n" * (col_spaces // 2)

  64.         return rendered


  65. print(Table([[1, 2, 3], [4, 5, 6], [7, 8, 9]]).render())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 09:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表