以下のようなプログラムを書いたとする。
import numpy as np
for i in np.arange(8,12,0.25):
print(f'ただいまの気温は {i} 度です')
結果は以下の通り。
ただいまの気温は 9.0 度です
ただいまの気温は 9.25 度です
ただいまの気温は 9.5 度です
ただいまの気温は 9.75 度です
ただいまの気温は 10.0 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.5 度です
ただいまの気温は 10.75 度です
数字の位置が不揃いでぱっと見の大小関係が比較しづらい。これを直したい。
rjust
Pythonにはこのような要望に答えるためにrjust
というメソッドがある。自動的に数字を右寄せにしてくれるのだ。しかし、これだけでは上手くいかない。
for i in np.arange(9,11,0.25):
print(f'ただいまの気温は {str(i).rjust(5)} 度です')
ただいまの気温は 9.0 度です
ただいまの気温は 9.25 度です
ただいまの気温は 9.5 度です
ただいまの気温は 9.75 度です
ただいまの気温は 10.0 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.5 度です
ただいまの気温は 10.75 度です
確かに右寄せにはなっているが、小数点の位置がバラバラなのだ。これは、float
が小数点以下に0があった時には省略するという仕様があるためである。場合によってはありがたいが、今回はあまりありがたくない。小数点以下の表示が同じでないと、ぱっと見の大小関係が比較しづらい。
format
Pythonにはこのような要望に答えるためにformat
という機能がある。{}
の表記を{:.2f}
とすれば、小数点以下の表示を2桁に固定してくれる。
for i in np.arange(9,11,0.25):
print(f'ただいまの気温は {i:.2f} 度です')
ただいまの気温は 9.00 度です
ただいまの気温は 9.25 度です
ただいまの気温は 9.50 度です
ただいまの気温は 9.75 度です
ただいまの気温は 10.00 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.50 度です
ただいまの気温は 10.75 度です
しかしこれでも微妙に上手くいっていない。整数部分の桁数が違う場合、左寄せになってしまうのだ。
幅指定(追記)
コメントで教えていただいた。こんな便利な記法があったとは。
for i in np.arange(9,11,0.25):
print(f'ただいまの気温は {i:5.2f} 度です')
ただいまの気温は 9.00 度です
ただいまの気温は 9.25 度です
ただいまの気温は 9.50 度です
ただいまの気温は 9.75 度です
ただいまの気温は 10.00 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.50 度です
ただいまの気温は 10.75 度です
複合技(追記前)
(※以下の記述は、上の「幅指定」を知る前に書いたものになります)
要は
- 小数点以下に0を含む
- 整数部分の桁が揃っていない
という場合は、どちらかを直すだけではダメなのである。これを適切に処理するためには、順を追って処理する必要がある。
for i in np.arange(9, 11, 0.25):
formated_i = f'{i:.2f}'
print(f'ただいまの気温は {str(formated_i).rjust(5)} 度です')
ただいまの気温は 9.00 度です
ただいまの気温は 9.25 度です
ただいまの気温は 9.50 度です
ただいまの気温は 9.75 度です
ただいまの気温は 10.00 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.50 度です
ただいまの気温は 10.75 度です
微妙にめんどくさい。