python_str_10文字以下の文字列を_10文字になるように空白を追加する_rjust_02

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 文字分として正しく右寄せできる。


コメント