ここで簡潔に説明したとおり, 変数の値を用いて文字列を生成するには Python 3.6 で追加された f 文字列が便利です.f 文字列を使うと書式設定を柔軟に行えるようになります.f 文字列を生成するには f
または F
をクォート(またはダブルクォート)の前に配置します.さらに { }
で囲った中に変数や式を入力すると,その値が文字列の中に差し込まれます.
item = "Cup"
price = 100
print(f"この{item}の値段は{price}円です")
このCupの値段は100円です
f 文字列では変数や式の直後に :
とオプションを入れると,幅などの書式指定が可能になります.次のように入力すると,文字列 (s) を 15文字,10進整数 (d) を 8 文字の幅で書式設定できます.
item = "Cup"
price = 100
print(f"この{item:15s}の値段は{price:8d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:15s}の値段は{price:8d}円です")
このCup の値段は 100円です このWin Grass の値段は 1280円です
文字列と10進整数のデータ型はそれぞれ,s
と d
ですが,他にも下の表のようなデータ型が利用できます.
書式指定 | 意味 |
---|---|
s | 文字列 |
d | 10進整数 |
b | 2進整数 |
x , X | 16進整数 |
f | 浮動小数点数 |
e , E | 指数形式の浮動小数点数 |
g , G | 10進または指数形式の浮動小数点数 |
10進整数だけでなく,2進整数や16進整数で表示すると次のようになります.なお,16進整数は小文字で表示させることも大文字で表示させることも可能です.
result = 159
print(f"結果は{result:d}です")
print(f"結果は{result:b}です")
print(f"結果は{result:x}です")
print(f"結果は{result:X}です")
結果は159です 結果は10011111です 結果は9fです 結果は9Fです
浮動小数点数の表示例は次の通りです.
pi = 3.141592653589793
print(f"円周率は{pi}です")
print(f"円周率は{pi:f}です")
print(f"円周率は{pi:e}です")
print(f"円周率は{pi:E}です")
円周率は3.141592653589793です 円周率は3.141593です 円周率は3.141593e+00です 円周率は3.141593E+00です
整数型に対して f
を指定すると,浮動小数点形式で表示できます.
result = 159
print(f"結果は{result:f}です")
結果は159.000000です
一方で,浮動小数点型に対して d
を指定することはできません.
pi = 3.141592653589793
print(f"円周率はおよそ{pi:d}です")
-------------------------------------------------- ValueError Traceback (most recent call last)
このような場合は整数型に型変換を行ってから書式を指定すべきです.
pi = 3.141592653589793
print(f"円周率はおよそ{int(pi):d}です")
円周率はおそよ3です
書式指定に g
や G
を使うと,指数形式を使うかどうかが自動的に判断されます.なお,123
などのように,一部の結果は浮動小数点形式ではなく整数形式で表示されていることにも注意してください.
x = 1.23
for y in range(-6, 7):
result = x * 10 ** y
print(f"結果は{result:g}です")
結果は1.23e-06です
結果は1.23e-05です
結果は0.000123です
結果は0.00123です
結果は0.0123です
結果は0.123です
結果は1.23です
結果は12.3です
結果は123です
結果は1230です
結果は12300です
結果は123000です
結果は1.23e+06です
書式指定で G
を使うと,大文字で表示されます.
x = 1.23
for y in range(-6, 7):
result = x * 10 ** y
print(f"結果は{result:G}です")
結果は1.23E-06です 結果は1.23E-05です 結果は0.000123です 結果は0.00123です 結果は0.0123です 結果は0.123です 結果は1.23です 結果は12.3です 結果は123です 結果は1230です 結果は12300です 結果は123000です 結果は1.23E+06です
ここですでに説明したとおり,f 文字列では変数や式の直後に :
とオプションを入れると,幅などの書式指定が可能になります.次のように入力すると,文字列 (s) を 15文字,10進整数 (d) を 8 文字の幅で書式設定できます.
(再掲)
item = "Cup"
price = 100
print(f"この{item:15s}の値段は{price:8d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:15s}の値段は{price:8d}円です")
このCup の値段は 100円です このWin Grass の値段は 1280円です
残念ながら,全角文字が含まれる場合は配置が崩れてしまいます.
item = "カップ"
price = 100
print(f"この{item:15s}の値段は{price:8d}円です")
item = "ワイングラス"
price = 1280
print(f"この{item:15s}の値段は{price:8d}円です")
このカップ の値段は 100円です このワイングラス の値段は 1280円です
整数型で先頭をゼロで埋める(パディングする)ためには :08d
と入力します.
数値のゼロ埋め(パディング)
item = "Cup"
price = 100
print(f"この{item:15s}の値段は{price:08d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:15s}の値段は{price:08d}円です")
このCup の値段は00000100円です このWin Grass の値段は00001280円です
上の結果のとおり,文字列形式では左揃え,数値の形式は右揃えになるのが標準です.この配置を変更することができます.左揃えにするには <
を指定します.
左揃え
item = "Cup"
price = 100
print(f"この{item:<15s}の値段は{price:<8d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:<15s}の値段は{price:<8d}円です")
このCup の値段は100 円です このWin Grass の値段は1280 円です
右揃えにするには >
を指定します.
右揃え
item = "Cup"
price = 100
print(f"この{item:>15s}の値段は{price:>8d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:>15s}の値段は{price:>8d}円です")
この Cupの値段は 100円です この Win Grassの値段は 1280円です
中央揃えは ^
です.
中央揃え
item = "Cup"
price = 100
print(f"この{item:^15s}の値段は{price:^8d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:^15s}の値段は{price:^8d}円です")
この Cup の値段は 100 円です この Win Grass の値段は 1280 円です
また,:
と配置指定の間に入力した文字でパディングが可能です.例えば商品名の前後はピリオドで,価格の前はアンダースコアでパディングします.
パディング
item = "Cup"
price = 100
print(f"この{item:.^15s}の値段は{price:_>8d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:.^15s}の値段は{price:_>8d}円です")
この......Cup......の値段は_____100円です この...Win Grass...の値段は____1280円です
浮動小数点数の表示精度も指定することができます.まず,精度を指定せずに円周率を表示すると次のようになります.
pi = 3.141592653589793
print(f"円周率は{pi}です")
円周率は3.141592653589793です
次のように指定すると全体で15桁を使って表示されます.なお四捨五入されていることにも注意してください.
print(f"円周率は{pi:15f}です")
円周率は 3.141593です
次のように指定すると,全体で10桁確保し,そのうち小数点以下の表示桁数を3桁にできます.
print(f"円周率は{pi:10.3f}です")
円周率は 3.142です
小数点以下の表示桁数のみを指定することもできます.
print(f"円周率は{pi:.2f}です")
円周率は3.14です
負数の場合はもちろんマイナスの記号が付与されます.その結果,正数の結果とはズレが生じる可能性があります.(負の円周率というおかしな部分は無視してください.)
print(f"円周率は{-pi:.2f}です")
円周率は-3.14です
+
を指定すると,負数にマイナス記号,正数にはプラスの記号が付与されます.
print(f"円周率は{pi:+.2f}です")
円周率は+3.14です
print(f"円周率は{-pi:+.2f}です")
円周率は-3.14です
スペース
を指定すると,負数にはマイナス記号,正数には空白が付与されます.
print(f"円周率は{pi: .2f}です")
円周率は 3.14です
print(f"円周率は{-pi: .2f}です")
円周率は-3.14です
指数形式の場合もほぼ同様です.
print(f"円周率は{pi:.3e}です")
円周率は3.142e+00です
Python 3.8 から変数のあとに =
を入れることで,変数の値だけでなく,変数の名前も表示できるようになりました.この機能は開発途中のデバック時などに活用できそうです.
pi = 3.141592653589793
print(f"円周率は{pi=}です")
円周率はpi=3.141592653589793です
変数名を表示しつつ,表示形式を指定することも可能です.
print(f"円周率は{pi=:8.3f}です")
円周率はpi= 3.142です