Python把⼀段字符串⽤“右起竖排”的古⽂格式输出例如:
静 夜 思  李 ⽩
床 前 明 ⽉ 光 ,
疑 似 地 上 霜 。
举 头 望 明 ⽉ ,
低 头 思 故 乡 。
结果是
低 举 疑 床 静
头 头 似 前 夜
思 望 地 明 思
故 明 上 ⽉
乡 ⽉ 霜 光 李
。 , 。 , ⽩
下⾯是我⽤Python实现的代码
1# offset诗句每⾏的字数
2def transfer(offset=6):
3    string = u'静夜思李⽩床前明⽉光,疑似地上霜。举头望明⽉,低头思故乡。'
4    a = [['']*offset for _ in xrange(len(string)/offset)]
5for i in xrange(len(string)/offset):
6for j in xrange(offset):
7            a[i][j] = string[i*offset + j]
8print'\n'.join([u''.join(unicode(c) for c in row)for row in a])
9print
10    b = zip(*a[::-1])
11print'\n'.join([u''.join(unicode(c) for c in row)for row in b])
12
13if__name__ == "__main__":
14    transfer()
这个transfer可以接受不同的参数, 表⽰每⾏的字数. 可以试试transfer(5), transfer(7)等等, 看看结果对不对.
使⽤了zip⽅法, zip可以把两个list压缩成为⼀个tuple的list. 看下⾯的例⼦
1 names = ['anne', 'beth', 'george', 'damon']
2 ages = [12, 45, 32, 102]
3print zip(names, ages)
4print zip(names, ages, ages)
输出结果是
[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]
[('anne', 12, 12), ('beth', 45, 45), ('george', 32, 32), ('damon', 102, 102)]
a[::-1]这句是切⽚, 这个是将a列表中的列表从后向前迭代的结果.
本例中, 原来的a是:
静夜思李⽩
床前明⽉光,
python格式化输出format疑似地上霜。
举头望明⽉,
低头思故乡。
a[::-1]就是这样的:
低头思故乡。
举头望明⽉,
疑似地上霜。
床前明⽉光,
静夜思李⽩
在调⽤函数时使⽤星号 * 或 **
test(*args):* 的作⽤其实就是把序列 args 中的每个元素,当作位置参数传进去。如果 args 等于 (1,2,3) ,那么这个代码就等价于test(1, 2, 3) 。
test(**kwargs):** 的作⽤则是把字典 kwargs 变成关键字参数传递。如果 kwargs 等于 {'a':1,'b':2,'c':3} ,那这个代码就等价于test(a=1,b=2,c=3) 。