フォーマット文字列(f文字列)と三連引用符の応用
f文字列(f-string)は Python 3.6 以降の「式を文字列中に直接書ける」超便利な機能です。三連引用符(トリプルクオート)と組み合わせると、複数行テンプレート+変数埋め込みを直感的に書けます。ここでは初心者向けにポイントと「よく使うテクニック」「実例」「練習問題(解答付き)」を簡潔にまとめます。
1) 基本のおさらい(短く)
name = "太郎"
age = 28
msg = f"{name}さんは{age}歳です。"
print(msg) # 太郎さんは28歳です。
Pythonf"..." の中に {式} を書くと、その式が評価されて文字列に埋め込まれます。
2) 三連引用符と組み合わせる(複数行テンプレート)
name = "花子"
plan = "ミーティング"
msg = f"""こんにちは、{name}さん。
今日の予定: {plan}
よろしくお願いします。"""
print(msg)
Python複数行のメッセージをそのまま書けて、行の途中で変数を埋め込めます。
先頭の余分な改行を防ぎたいときは f"""\(バックスラッシュ)を使います:
msg = f"""\
こんにちは、{name}さん。
今日の予定: {plan}"""
Python3) よく使う便利テクニック
(A) 数値の書式指定(小数点・桁区切りなど)
price = 12345.6789
print(f"価格: {price:.2f}") # 小数第2位まで: 12345.68
print(f"価格: {price:,.1f}") # 3桁区切り+小数1位: 12,345.7
Python(B) 幅・揃え(整形された表の出力)
name = "Aさん"
score = 95
print(f"{'名前':<10}{'得点':>5}")
print(f"{name:<10}{score:>5d}")
# < 左寄せ、> 右寄せ、^ 中央揃え
Python(C) 変換指定子 !s !r(表示を指定)
val = "Hello\n"
print(f"{val!s}") # str 表示
print(f"{val!r}") # repr 表示(エスケープを含めて見たいとき)
Python(D) 式をそのまま書ける(計算や条件)
a, b = 10, 3
print(f"{a} ÷ {b} = {a/b:.3f}")
print(f"{'合格' if a> b else '不合格'}です。")
Python(E) 中かっこ { を文字として出す(エスケープ)
print(f"波かっこを出すには {{ と }} を2個書く: {{example}}")
# 出力: 波かっこを出すには { と } を2個書く: {example}
Python(F) 日付の書式(datetime を直接フォーマット)
from datetime import datetime
now = datetime(2025,11,3,14,30)
print(f"現在: {now:%Y-%m-%d %H:%M}") # 2025-11-03 14:30
Python4) 実用例:メールテンプレート(三連引用符+f文字列)
from datetime import datetime
user = "佐藤さん"
date = datetime.now()
items = [("りんご", 3), ("バナナ", 2)]
body = f"""\
{user}へ
いつもありがとうございます。
ご注文内容({date:%Y/%m/%d}):
"""
for name, qty in items:
body += f"- {name} x{qty}\n"
body += "\nよろしくお願いします。"
print(body)
Python出力は読みやすい複数行テンプレートに変数やループの結果を組み込みます。
5) よくある落とし穴(初心者がハマりやすい点)
fを忘れると{}はそのまま出力されます(評価されない)。
→msg = f"{name}さん"を忘れない。fとrの順序: raw string と組み合わせたい時はrf"..."またはfr"..."と書く。順序はどちらでも動くがfを忘れやすい。- 波かっこをそのまま書きたいときは
{{と}}にする。 - 複雑なロジックを f-string に詰め込みすぎると読みにくくなる。処理は関数で分けて、f-string には最小限の式を入れるのが読みやすい。
6) 練習問題(解答付き)
問題1(基礎)
変数 product="ノートPC", price=134800 を使って、"商品: ノートPC, 価格: 134,800円" のように桁区切りで出力してください(f文字列を使用)。
解答
product = "ノートPC"
price = 134800
print(f"商品: {product}, 価格: {price:,}円")
Python解説: :, で3桁区切り(カンマ)を入れられます。
問題2(応用)
以下のリスト people = [("山田", 92.456), ("鈴木", 85.2)] を、幅を揃えた表で出力してください(名前は左寄せ幅10、点数は小数点以下1桁で右寄せ幅6)。
期待出力例:
名前 得点
山田 92.5
鈴木 85.2
解答
people = [("山田", 92.456), ("鈴木", 85.2)]
print(f"{'名前':<10}{'得点':>6}")
for name, score in people:
print(f"{name:<10}{score:6.1f}")
Python解説: {name:<10} で左寄せ幅10、{score:6.1f} で幅6・小数1桁の浮動小数点に整形。
問題3(応用・実用)
ユーザー名 user="田中"、注文日 date=datetime(2025,11,3) のデータを使って、次のように先頭に余分な空行がない複数行メッセージを出力してください(f三連引用符を使用)。
期待出力:
田中さん
ご注文ありがとうございます(2025-11-03)。
配送まで少々お待ちください。
解答
from datetime import datetime
user = "田中"
date = datetime(2025,11,3)
msg = f"""\
{user}さん
ご注文ありがとうございます({date:%Y-%m-%d})。
配送まで少々お待ちください。
"""
print(msg)
Python解説: f"""\ を使うことで先頭の空行を防ぎ、{date:%Y-%m-%d} で日付の書式指定を行っています。
7) 最後に(実務ワンポイント)
- テンプレートが複雑なら
str.format()やTemplate、あるいはテンプレートエンジン(Jinja2 等)の検討もあり。 - ただし簡単なメッセージやログ、レポートなどは f文字列+三連引用符で十分に速く・読みやすく書けます。
