pythonの文字列の操作のときに
rjustを使う際、
全角の文字列に対して使うときは
正しくどうさするのでしょうか?
```python
scanned_code = "あいう" # 例: 3文字の文字列
# f文字列を使って10文字になるように左側に空白を追加
formatted_code = scanned_code.rjust(15)
print(repr(formatted_code))
`
だと、どのような動作になるのでしょうか?
半角の空白が追加されるのでしょうか?
↓
`rjust()` を使った場合、
Python は **文字単位** で幅を計算します。
そのため、全角文字も 1 文字としてカウントされ、
半角の空白が追加されます。
以下のコードで挙動を確認できます:
```python
scanned_code = "あいう" # 3文字の全角文字列
# rjustを使って15文字にする
formatted_code = scanned_code.rjust(15)
print(repr(formatted_code))
```
### 期待される出力
```
' あいう'
```
(半角スペース 12 個 + "あいう")
### 挙動のポイント
- `rjust(15)` は
**「全角文字も 1 文字としてカウント」** するため、
「あいう」が **3 文字** だと認識される。
- 15 文字にするために、
左側に **12 個の半角スペース** が追加される。
---
### 全角スペースを使いたい場合
`rjust()` は半角スペースで埋めるので、
全角スペース(`\u3000`)を使いたい場合は
`rjust()` の第二引数を変更する。
```python
# 全角スペース(U+3000)を指定
formatted_code = scanned_code.rjust(15, " ")
print(repr(formatted_code))
```
出力:
```
' あいう'
```
(全角スペース 12 個 + "あいう")
---
### 幅ベースで調整したい場合
「見た目の幅を15桁にしたい」場合は `len()` ではなく
`wcwidth` を使うとよい。
```python
import wcwidth
# 3文字の全角文字列
scanned_code = "あいう"
# 見た目の幅を取得
width = sum(wcwidth.wcwidth(c)
for c in scanned_code)
# 半角基準で15文字(全角は2文字分とする)
target_width = 30
padding = target_width - width
# 見た目の幅を考慮して調整
formatted_code = " " * padding + scanned_code
print(repr(formatted_code))
```
この方法なら、全角文字を 2 文字分として正しく右寄せできる。
コメント
コメントを投稿