代码演练_文字竖排
题目
把一段字符串用“右起竖排”的古文格式输出,并以竖线(“|”)符号作为每一列的分隔符。
例如这段文本:
静夜思
李白
床前明月光
疑是地上霜
举头望明月
低头思故乡
输出结果:
低|举|疑|床|李|静
头|头|是|前|白|夜
思|望|地|明| |思
故|明|上|月| |
乡|月|霜|光| |
思路
仔细观察文本,我们就可以发现从下往上依次输出每一行的第一个字,然后是第二个字,以此类推就可以得到“右起竖排”的古文格式。 同时,为了对齐,我们需要把短句用中文全角空格补全,如果句中有英文半角空格,也要替换成中文全角空格。
zip()函数将每个集合的同位置的元素组成一个元组,函数用法如下:
zip(...)
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
代码
# coding:utf-8
text = u'''
静夜思
李白
床前明月光
疑是地上霜
举头望明月
低头思故乡
'''
# 中文全角空格
blank = u'\u3000'
lines = text.splitlines()
# 去掉首尾空白
lines = [x.strip() for x in lines]
# 去掉空元素
lines = [x for x in lines if x]
# 将句中的英文半角空格替换成中文全角空格
lines = [x.replace(' ', blank) for x in lines]
# 反转句子的顺序
lines = list(reversed(lines))
# 补足短句
max_len = max([len(x) for x in lines])
lines = [x+blank*(max_len-len(x)) for x in lines]
for x in zip(*lines):
print '|'.join(x)