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"..."を使い分けたか - 整列の見た目: タブか幅指定のどちらが適切か選べているか
- 長文の安全性: 行継続より括弧連結を優先しているか
