Python | 文字列の中で「普通に書けない文字」を扱う — エスケープシーケンス

Python
スポンサーリンク

Pythonの文字列とエスケープシーケンスの練習問題(レベル別)

はじめは「動かして確認」。出力を必ず目で見ることが、文字列の感覚を掴むいちばんの近道です。各問題は「解答」と「解説」付きです。


初級

問題1:改行で見やすく表示

  • 目的: 改行 \n の基本を身につける
  • 指示: 3行の自己紹介を改行して表示する(名前・好きなもの・一言)
# 解答
print("名前:太郎\n好きなもの:ラーメン\nひとこと:よろしくお願いします")
Python
  • 解説:
    改行: \n は「ここで次の行へ」という合図。コード上は2文字(バックスラッシュ+n)だが、出力では本物の改行になる。

問題2:タブで表を作る

  • 目的: タブ \t で列をざっくり揃える
  • 指示: 「品名」「価格」の2列のミニ表を作る
# 解答
print("品名\t価格")
print("りんご\t120")
print("バナナ\t100")
Python
  • 解説:
    タブ: \t は広めの空白。完全に揃わないこともあるが、簡易表なら十分。厳密に揃えたいときは幅指定のフォーマットを使う。

問題3:引用符を含む文字列

  • 目的: \"\' の使い分け
  • 指示: 彼が「やればできる」と言った、をダブルクォーテーション付きで表示
# 解答1(エスケープあり)
print("彼は\"やればできる\"と言った")

# 解答2(外側をシングルにする)
print('彼は"やればできる"と言った')
Python
  • 解説:
    引用符: 外側と同じ種類の引用符を中で使うときはエスケープが必要。外側を切り替えるとエスケープ不要になる。

問題4:バックスラッシュをそのまま

  • 目的: \\ の理解
  • 指示: Windowsのパス C:\Users\Guest を正しく表示
# 解答1(エスケープ)
print("C:\\Users\\Guest")

# 解答2(生文字列)
print(r"C:\Users\Guest")
Python
  • 解説:
    バックスラッシュ: \ はエスケープの始まりなので、表示したいなら \\。生文字列 r"..." は中の \ を特別扱いしない。

中級

問題5:複数行のメッセージを整形

  • 目的: \n と箇条書きの組み合わせ
  • 指示: 明日の予定(9時:掃除/12時:買い物/18時:映画)を改行付きで表示
# 解答
schedule = "明日の予定\n・9時:掃除\n・12時:買い物\n・18時:映画"
print(schedule)
Python
  • 解説:
    可読性: 文字列を変数に入れてから出力すると、後で編集しやすい。箇条書き記号も文字として扱われる。

問題6:タブと幅指定できれいに整列

  • 目的: タブの限界を知り、フォーマットで揃える
  • 指示: 品名を左寄せ幅10、価格を右寄せ幅6で表示
# 解答(f文字列)
print(f"{'品名':<10}{'価格':>6}")
print(f"{'りんご':<10}{120:>6}")
print(f"{'バナナ':<10}{100:>6}")
Python
  • 解説:
    フォーマット指定: :<10 は左寄せ幅10、 :>6 は右寄せ幅6。タブより見た目が安定する。

問題7:三重クォーテーションで複数行

  • 目的: 複数行文字列の扱い
  • 指示: 次の3行をそのままの改行で表示
    「注意事項」「1. 時間厳守」「2. 連絡は事前に」
# 解答
msg = """注意事項
1. 時間厳守
2. 連絡は事前に"""
print(msg)
Python
  • 解説:
    複数行文字列: 三重クォーテーションは書いた改行・空白がそのまま出る。インデントすると余分な空白が混ざる点に注意。

問題8:行継続で長文を分ける

  • 目的: 可読性のための分割
  • 指示: 1行が長い英語文をコード上で2行に分けて書く
# 解答1(行継続)
text = "I will go to the amusement park with \
my children tomorrow."
print(text)

# 解答2(推奨:括弧連結)
text2 = (
    "I will go to the amusement park with "
    "my children tomorrow."
)
print(text2)
Python
  • 解説:
    括弧連結: 行末の \ は見落とすとバグになりやすい。括弧で自動連結する方法が安全。

上級

問題9:混在するエスケープの正確な出力

  • 目的: 複数のエスケープが混じったときの注意
  • 指示: 次を1回の print で表示
    1行目:She said “OK”
    2行目:Path: C:\tools\new
    3行目:Tab→A B(AとBの間にタブ)
# 解答
print("She said \"OK\"\nPath: C:\\tools\\new\nTab→A\tB")
Python
  • 解説:
    優先順序: 文字列の中で \n\\\" を同時に扱うときは、どこで何が効くかを明確に。テスト出力で確認。

問題10:生文字列の落とし穴

  • 目的: 生文字列 r"..." でも最後のバックスラッシュは不可という仕様を理解
  • 指示: 次の2つのパスを表示し、片方は生文字列でうまくいかないことを確認
    A: C:\temp\new
    B: C:\temp\
# 解答
print(r"C:\temp\new")   # OK
# print(r"C:\temp\")    # これは文法エラーになる(末尾の \ が引用符をエスケープしてしまう)
print("C:\\temp\\")     # 正しくはこう書く
Python
  • 解説:
    末尾のバックスラッシュ: 生文字列は便利だが、末尾の \ はクォーテーションを「逃がす」ためエラー。\\ を使って回避。

問題11:見た目厳密な表整形(混在幅)

  • 目的: 日本語と数字の混在でも美しく揃える
  • 指示: 品名を全角含み、価格をカンマ区切りで右寄せ
# 解答
items = [("りんご", 120), ("高級ぶどう", 19800), ("茶", 300)]
print(f"{'品名':<20}{'価格':>10}")
for name, price in items:
    print(f"{name:<20}{price:>10,}")
Python
  • 解説:
    カンマ区切り: :, で桁区切り。全角は文字幅が環境で異なることがあるため、完全揃えはフォント依存。概ねはこの指定で十分。

問題12:テンプレート化して安全に引用

  • 目的: 引用符や改行を含む文章を安全に組み立てる
  • 指示: 名言と話者を受け取り、次の形式で返す関数を作る
    「”名言” — 話者」改行のあとに「Thank you.」
# 解答
def format_quote(quote, author):
    return f"\"{quote}\"{author}\nThank you."

print(format_quote("失敗は成功のもと", "ことわざ"))
Python
  • 解説:
    f文字列+エスケープ: " を安全に挿入し、最後に \n で改行。関数化すると再利用が簡単。

チェックリスト(自分で見直すポイント)

  • 改行の位置: 望む場所にだけ \n があるか
  • 引用符の整合: 外側と内側のクォーテーションが衝突していないか
  • バックスラッシュ: Windowsパスや正規表現で \\r"..." を使い分けたか
  • 整列の見た目: タブか幅指定のどちらが適切か選べているか
  • 長文の安全性: 行継続より括弧連結を優先しているか
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました