python3 题解(38 格子中的输出)

在格子中输出

【问题】给定多个串的列表,每个串含多个项,用逗号分开。
把这些项输出到表格中,居中对齐。
例如,串表如下:

a,bb,ccc
aaaa,,ccccc
a,b,c,ddd
aa,,ccccccccccccccccc,,ee

则输出的效果如下:

+----+--+-----------------+---+--+
| a  |bb|       ccc       |   |  |
+----+--+-----------------+---+--+
|aaaa|  |      ccccc      |   |  |
+----+--+-----------------+---+--+
| a  |b |        c        |ddd|  |
+----+--+-----------------+---+--+
| aa |  |ccccccccccccccccc|   |ee|
+----+--+-----------------+---+--+

分析:
首先,可以把串中的多个项变成关于串的列表。
然后,统计表格每个列中串的最大宽度,作为表格的列宽。
如果用字典记录这些信息,可以用列号作键,用最大宽度作值。
当需要输出表格的时候,对每行,输出分割线,接着输出表格内容,最后再补一个分割线。
项数不足的行,需要补充一些空串在尾部。

### 在格子内输出
def show_grid(ss):
	t = [ s.strip().split(',') for s in ss ]
	w = {} ## 存每一列的最大宽度, 形如:{1:15,2:10...}
	for ti in t:
		for i,s in enumerate(ti):
			v = w.get(i,0)
			w[i] = max(v,len(s))

	def show_line():
		for i in sorted(w.keys()):
			print('+' + '-' * w[i], end='')
		print('+')

	for ti in t:
		show_line()
		while len(ti)<len(w): ti.append("")
		for i,s in enumerate(ti):
			print('|' + s.center(w[i]), end='')
		print('|')
	show_line()

if __name__ == '__main__':
	x = ['a,bb,ccc', \
		 'aaaa,,ccccc', \
		 'a,b,c,ddd', \
		 'aa,,ccccccccccccccccc,,ee']
	show_grid(x)

取出字典的键的时候,要请注意,它可能不是按照期望的顺序,需要先排序一下。
这个应用中,键是整数,而且中间没有间断,也可以用列表来完成。

用字典的时候,如果使用 defaultdict 可能表述会更紧凑一些。


需要补基础的,可以看:小甲鱼pyhthon教程,Bilibili站上还有:[耿老师]小甲鱼python作业 解析系列,持续更新中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值