最近在實現一個小功能的時候遇到了問題:字符串的居中輸出。
雖然 python 有內置的字符串方法string.center()
,使字符串可以居中輸出,但它並不能順利地處理中文字符串,一直無法達到讓中文字符串居中的效果。
後來我突然醒悟,是不是因為 python 字符串長度的問題?用以下代碼測試:
str1='哈哈哈'
str2='hhh'
print(len(str1),'+',len(str2))
輸出結果居然是3+3
,也就是說 python 將一個漢字 / 字母都記作一個字符,但其實它們的寬度並不相同。這樣計算的話必然會導致無法正常居中,關鍵是要把漢字區別出來,於是我手動寫了個居中函數:
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
就可以正常居中啦!
追加以下內容測試一下:
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))
運行結果:
哈a哈a哈a哈a
12345678901234567890
--------------------
哈a哈a哈a哈a
12345678901234567890
任務成功完成!