練習問題(f文字列 + 三連引用符) — レベル別(解答付き)
まずは 問題だけを解いて、そのあと 解答と短い解説を確認できるようにしました。
時間を測ったり、自力で考えてから答えを見ると効果的です。
基礎(4問)
問題 1
変数 name = "太郎" と age = 30 を使い、次の一行メッセージを f文字列で作ってください。
期待出力:太郎さんは30歳です。
問題 2
三連引用符と f文字列を使って、次の複数行メッセージを変数 msg に作り、出力してください(先頭に余分な空行がないように)。
佐藤さんへ
本日のお知らせ:ミーティングは15時からです。
よろしくお願いします。
問題 3price = 98765.4321 を 3 桁区切りかつ小数点以下 2 桁で出力する f文字列を書いてください。期待出力:98,765.43
問題 4
f文字列内で中かっこ {} をそのまま表示したい場合があります。次の文字列を出力するコードを書いてください:辞書のキーは { "name": "太郎" } です。
(ヒント:{{ と }} を使います)
中級(4問)
問題 5
リスト items = [("りんご", 3), ("バナナ", 12), ("みかん", 2)] を使い、三連引用符+ループで以下のような注文メール本文を作るコードを書いてください(先頭の余分な空行は無くす)。期待出力例:
ご注文ありがとうございます。
・りんご x3
・バナナ x12
・みかん x2
問題 6people = [("山田", 92.456), ("鈴木", 85.2), ("佐々木", 100)] を幅揃えで表にしてください(「名前」は左寄せ幅12、「得点」は幅7で小数第1位)。見出し付きで、期待出力例:
名前 得点
山田 92.5
鈴木 85.2
佐々木 100.0
問題 7a, b = 7, 3 を使って、次のように小数第3位まで表示する f文字列を作ってください:7 ÷ 3 = 2.333(丸めは通常の四捨五入で OK)
問題 8now = datetime(2025, 11, 3, 9, 5) を f文字列で 2025-11-03 09:05 の形式で出力するコードを書いてください(datetime の % 書式を使う)。
上級(4問)
問題 9
三連引用符と f文字列を使って、複数行の SQL テンプレートを作ってください(テーブル名とカラムを変数で埋める)。変数例:
table = "users"
columns = "id, name, email"
Python期待出力:
SELECT id, name, email
FROM users
WHERE active = 1;
SQL問題 10
次の dict stats = {"a": 12, "b": 3, "c": 45} を受け取り、三連引用符内の f文字列だけで(ループを使わずに)次のように出力する式を書いてください(ヒント:{stats['a']} のように書く)。期待出力:
a: 12
b: 3
c: 45
問題 11
次の条件式を f文字列内に直接書いて、結果を出力してください:score = 65 のとき "合格" は 70 点以上のみとし、期待出力:結果: 不合格(三項演算子を f文字列内で使う)
問題 12(チャレンジ)
注文テンプレートを作る関数 make_order_email(user, items) を書いてください。
userは文字列(名前)。itemsは(name, qty, price)タプルのリスト。
関数は三連引用符と f文字列で次のような本文を返します(合計金額は桁区切り、税込みは消費税 10% で計算、小数は出さないで整数で表示)。期待出力例:
田中様
ご注文ありがとうございます。
- ノートPC x1 : 120,000円
- マウス x2 : 2,400円
合計(税抜): 122,400円
消費税 (10%): 12,240円
合計(税込): 134,640円
発送までお待ちください。
(※金額は items によって変動)
解答(コード)と簡単な解説
答えを見たくない場合はここで止めてください。自分でやってから照合すると一番学べます。
解答1
name = "太郎"
age = 30
print(f"{name}さんは{age}歳です。")
Python解答2
name = "佐藤"
msg = f"""\
{name}さんへ
本日のお知らせ:ミーティングは15時からです。
よろしくお願いします。
"""
print(msg)
Python解説:f"""\ で先頭の空行を防ぐ。
解答3
price = 98765.4321
print(f"{price:,.2f}") # 98,765.43
Python解答4
print(f'辞書のキーは {{ "name": "太郎" }} です。')
Python解説:{{ と }} が一つの { } に展開される。
解答5
items = [("りんご", 3), ("バナナ", 12), ("みかん", 2)]
body = f"""\
ご注文ありがとうございます。
"""
for name, qty in items:
body += f"・{name} x{qty}\n"
print(body)
Python解答6
people = [("山田", 92.456), ("鈴木", 85.2), ("佐々木", 100)]
print(f"{'名前':<12}{'得点':>7}")
for name, score in people:
print(f"{name:<12}{score:7.1f}")
Python解説:<12 は左寄せ幅12、7.1f は幅7で小数1位。
解答7
a, b = 7, 3
print(f"{a} ÷ {b} = {a/b:.3f}") # 7 ÷ 3 = 2.333
Python解答8
from datetime import datetime
now = datetime(2025, 11, 3, 9, 5)
print(f"{now:%Y-%m-%d %H:%M}") # 2025-11-03 09:05
Python解答9
table = "users"
columns = "id, name, email"
sql = f"""\
SELECT {columns}
FROM {table}
WHERE active = 1;
"""
print(sql)
Python解答10
stats = {"a": 12, "b": 3, "c": 45}
print(f"""a: {stats['a']}
b: {stats['b']}
c: {stats['c']}""")
Python解説:ループを使わずにキー指定で埋める方法。
解答11
score = 65
print(f"結果: {'合格' if score >= 70 else '不合格'}")
Python解答12(模範解答)
def make_order_email(user, items):
# items: list of (name, qty, price) price は税抜き単価(整数)
lines = ""
total = 0
for name, qty, price in items:
subtotal = qty * price
total += subtotal
lines += f"- {name} x{qty} : {subtotal:,}円\n"
tax = int(total * 0.10) # 消費税 10%、整数へ切り捨て(必要なら round も可)
total_with_tax = total + tax
body = f"""\
{user}様
ご注文ありがとうございます。
{lines}
合計(税抜): {total:,}円
消費税 (10%): {tax:,}円
合計(税込): {total_with_tax:,}円
発送までお待ちください。
"""
return body
# 使用例
items = [("ノートPC", 1, 120000), ("マウス", 2, 1200)]
print(make_order_email("田中", items))
Python解説:三連引用符で本文テンプレートを作り、ループで明細を文字列連結、{:,} で桁区切り。
おまけ・学習アドバイス
- まずは基礎問題を全部自分で解いてみてください。
- 中級〜上級は実務に近い形なので、関数化やエラーチェック(空リスト対応など)も試してみると実力が伸びます。
fを忘れるミスが頻出 → テスト実行して{}がそのまま出るか確認するクセをつけるとよいです。
