amtoaer

晓风残月

叹息似的渺茫,你仍要保存着那真!
github
x
telegram
steam
nintendo switch
email

pythonの中文文字列の中央揃えの問題

最近、小さな機能を実装する際に問題に遭遇しました:文字列の中央揃えの出力です。

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

タスクは成功裏に完了しました!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。