最近、小さな機能を実装する際に問題に遭遇しました:文字列の中央揃えの出力です。
Python には組み込みの文字列メソッドstring.center()
があり、文字列を中央揃えで出力することができますが、これは中文文字列をスムーズに処理することができず、中文文字列を中央揃えにする効果を得ることができませんでした。
後で気づいたのですが、これは Python の文字列の長さの問題ではないかと思いました。以下のコードでテストしてみました:
str1='哈哈哈'
str2='hhh'
print(len(str1),'+',len(str2))
出力結果はなんと3+3
でした。つまり、Python は漢字 / アルファベットを 1 文字としてカウントしていますが、実際には幅が異なります。このように計算すると、正常に中央揃えができなくなります。重要なのは漢字を区別することです。そこで、中央揃えの関数を手動で作成しました:
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
タスクは成功裏に完了しました!