在python中如何将横向输入的中文竖直输出

输入:语句七言绝句(句子间用“,”隔开以“。”结尾)
输出:竖直形式

试试这个。我的是python3.2
# -*- coding: utf-8 -*-
def vertical_print(s):
lines=s.strip('。').split(',')
lines.reverse()
print('\n'.join([' '.join(w) for w in zip(*lines)]))

vertical_print("白日依山尽,黄河入海流,欲穷千里目,更上一层楼。")

python 2.5请用:

# -*- coding: utf-8 -*-
def vertical_print(s):
lines=s.strip('。'.decode('utf8')).split(','.decode('utf8'))
lines.reverse()
print '\n'.join([' '.join(w) for w in zip(*lines)])

s="白日依山尽,黄河入海流,欲穷千里目,更上一层楼。".decode('utf8')
vertical_print(s)追问

我是初学者,你能不能把这里所用到的函数所实现的功能说明一下啊 谢谢!

追答

s.strip('。').split(',')
去掉最后的句号,然后以逗号为分隔符,把句子分开,存到一个list当中。执行完成后,
lines=['白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼']

lines.reverse()把lines里面的句子倒序。这是因为竖排书写时是从右到左的。执行后
lines=['更上一层楼', '欲穷千里目', '黄河入海流', '白日依山尽']

print('\n'.join([' '.join(w) for w in zip(*lines)]))这句比较复杂,分开说
[' '.join(w) for w in zip(*lines)]构造了一个列表,核心是zip(*lines)。
zip()的作用是把传入的多个iterable结合在一起。比如list(zip("abc","def","ghi"))得到的是[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]。在这里,从zip(*lines)得到每行应该输出的字符组成的元组。你可以用list(zip(*lines))看一下,应该是
[('更', '欲', '黄', '白'), ('上', '穷', '河', '日'), ('一', '千', '入', '依'), ('层', '里', '海', '山'), ('楼', '目', '流', '尽')]
之后,[' '.join(w) for w in zip(*lines)]用' '空格把元组当中的各个字连接起来,形成了需要输出的各行。[' '.join(w) for w in zip(*lines)]的结果是:
['更 欲 黄 白', '上 穷 河 日', '一 千 入 依', '层 里 海 山', '楼 目 流 尽']

print('\n'.join([' '.join(w) for w in zip(*lines)])) 这样这句的结果很明显了,用换行符'\n'把各行连接起来,形成竖排诗句。

本质上这个程序是一个类似矩阵转置的过程,核心就是zip()函数的调用。doc在这里
http://docs.python.org/py3k/library/functions.html?highlight=zip#zip

学习python要用python的思路做练习啊。尽量不受C的思路限制才能写好python。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-29
如果输入的参数长度不一样的话,用zip函数会出错,比如输入不是这种诗句,是一首现代诗或者文章。本回答被网友采纳
第2个回答  2011-09-30
可以输出不同长短的句子,包括七言,五言,不规则的现代诗也应该能输出。程序如下:
# -*- coding: utf-8 -*-
'''
Created on 2011-9-30

@author: legendxx
'''

def printpeom2(s):
l=s.split("。")
l2=[]
for x in l:
l2=l2+x.split(",")

#get max number in each sentence
l3=[len(x) for x in l2]
m=max(l3)

#print sentence
for x in range(0,m):
for y in l2:
if len(y)>x:
print y[x],
else:
print " ",
print

s=['千山鸟飞绝,万径人踪灭。孤舟蓑笠翁,独钓寒江雪'.decode('utf-8'),
'鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波'.decode('utf-8'),
"朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不住,轻舟已过万重山".decode('utf-8')]

if __name__=='__main__':

for x in s:
print
printpeom2(x)
第3个回答  2011-09-29
# -*- coding: utf-8 -*-

s='一二三四五,天涯人真多'.decode('utf-8')
def prn(s):
lines=s.split(',')
lines.reverse()
print lines
lineNum=len(lines)
lineLen=len(lines[0])
newlines=['']*lineLen
for i in range(lineLen):
for j in range(lineNum):
newlines[i]+=lines[j][i]
for line in newlines:
print line

if __name__=='__main__':
#mycalc()
prn(s)
第4个回答  2020-08-30
lines = ['更上一层楼', '欲穷千里目', '黄河入海流', '白日依山尽']
zip(*lines)
print ('\n'.join([''.join(w) for w in zip(*lines)]))
用这个就可以实现中文竖排输出