python中文字符串居中问题

最近在实现一个小功能的时候遇到了问题:字符串的居中输出。

虽然python有内置的字符串方法string.center(),使字符串可以居中输出,但它并不能顺利地处理中文字符串,一直无法达到让中文字符串居中的效果。

后来我突然醒悟,是不是因为python字符串长度的问题?用以下代码测试:

1
2
3
str1='哈哈哈'
str2='hhh'
print(len(str1),'+',len(str2))

输出结果居然是3+3,也就是说python将一个汉字/字母都记作一个字符,但其实它们的宽度并不相同。这样计算的话必然会导致无法正常居中,关键是要把汉字区别出来,于是我手动写了个居中函数:

1
2
3
4
5
6
7
8
9
10
11
def strCenter(str, len):
lst = list(str)
length = 0
for item in lst:
if item in string.printable:
length += 1
else:
length += 2
count = int((len - length) / 2)
result = count * ' ' + str + count * ' '
return result

就可以正常居中啦!

追加以下内容测试一下:

1
2
3
4
5
6
7
a = '哈a哈a哈a哈a'
b = '12345678901234567890'
print(a.center(20))
print(b.center(20))
print(20 * '-')
print(strCenter(a, 20))
print(strCenter(b, 20))

运行结果:

1
2
3
4
5
      哈a哈a哈a哈a      
12345678901234567890
--------------------
哈a哈a哈a哈a
12345678901234567890

任务成功完成!