自動採点付き学習ノート
- 実行すると各問題が表示され、ユーザーが自分の答えを入力できる
- 入力後、正解か不正解かと解説を自動で表示
- 基礎〜中級〜応用すべて対応
# ===============================================
# Python文字列演習50問(自動採点付き学習ノート形式)
# ===============================================
import re
# 問題データ(問題文、正解、解説)
problems = [
# 基礎編(1〜20問)
{"question":"1. 'Hello' と 'World' を連結してください",
"answer":"HelloWorld",
"explanation":"+ 演算子で文字列同士をつなげます"},
{"question":"2. 'Hi' を 4 回繰り返してください",
"answer":"HiHiHiHi",
"explanation":"* 演算子で文字列を整数回繰り返せます"},
{"question":"3. 'apple' が 'pineapple' に含まれるか? True/False で答えよ",
"answer":"True",
"explanation":"in 演算子で部分文字列の存在を確認できます"},
{"question":"4. 'cat' が 'concatenate' に含まれるか? True/False",
"answer":"True",
"explanation":"in 演算子で部分文字列の存在を確認"},
{"question":"5. 'Python' の文字数はいくつか?",
"answer":"6",
"explanation":"len() で文字列の長さを取得できます"},
{"question":"6. 'Python' の先頭文字を答えよ",
"answer":"P",
"explanation":"インデックス0で先頭文字を取得"},
{"question":"7. 'Python' の末尾文字を答えよ",
"answer":"n",
"explanation":"-1で最後の文字を取得"},
{"question":"8. 'Python' の1文字目から3文字目までを答えよ",
"answer":"Pyt",
"explanation":"スライス[start:end]で部分文字列を取得"},
{"question":"9. 'Python' の最後の3文字を答えよ",
"answer":"hon",
"explanation":"-3:で最後の3文字を取得"},
{"question":"10. 'Python' を大文字に変換せよ",
"answer":"PYTHON",
"explanation":".upper() で大文字に変換"},
{"question":"11. 'Python' を小文字に変換せよ",
"answer":"python",
"explanation":".lower() で小文字に変換"},
{"question":"12. 'python' をタイトル形式にせよ",
"answer":"Python",
"explanation":".title() で単語の先頭を大文字に変換"},
{"question":"13. 'Hello World' に '!' が含まれるか? True/False",
"answer":"False",
"explanation":"in 演算子で確認できます"},
{"question":"14. 'Python' の 'o' の位置は?",
"answer":"4",
"explanation":".index() で指定文字の最初の位置を取得"},
{"question":"15. 'Python' に '3' を追加せよ",
"answer":"Python3",
"explanation":"+ 演算子で連結"},
{"question":"16. 'Python' を逆順にせよ",
"answer":"nohtyP",
"explanation":"[::-1] で逆順に"},
{"question":"17. ' Python ' の前後空白を削除せよ",
"answer":"Python",
"explanation":".strip() で前後空白を削除"},
{"question":"18. 'Python' を1文字ずつ表示せよ(連結で答える)",
"answer":"Python",
"explanation":"for ループで各文字を取得可能"},
{"question":"19. 'Python' をリスト化せよ(連結で答える)",
"answer":"Python",
"explanation":"list() で文字列を文字単位でリスト化"},
{"question":"20. 'Hello' と 'World' を空白を入れて連結せよ",
"answer":"Hello World",
"explanation":"+ 演算子で空白を文字列として追加"},
# 中級編(21〜35問)
{"question":"21. 'Apple' と 'apple' は等しいか? True/False",
"answer":"False",
"explanation":"大文字小文字が違うので False"},
{"question":"22. 'banana' > 'apple' は? True/False",
"answer":"True",
"explanation":"アルファベット順で比較される"},
{"question":"23. 'Hello World' を空白で分割せよ(連結で答える)",
"answer":"HelloWorld",
"explanation":"split() で分割可能"},
{"question":"24. 'Hello World' の 'World' 部分を取り出せ",
"answer":"World",
"explanation":"split()[1] で取得"},
{"question":"25. 'Python' の 'y' の位置は?",
"answer":"1",
"explanation":".index() で取得"},
{"question":"26. 'Python' に '3' を追加せよ",
"answer":"Python3",
"explanation":"+ 演算子で文字列連結"},
{"question":"27. 'Python' を逆順にせよ",
"answer":"nohtyP",
"explanation":"[::-1] で逆順に"},
{"question":"28. ' Python ' の空白を削除せよ",
"answer":"Python",
"explanation":".strip() で削除"},
{"question":"29. 'python' をタイトル形式にせよ",
"answer":"Python",
"explanation":".title() で変換"},
{"question":"30. 'Hello World' に '!' が含まれるか? True/False",
"answer":"False",
"explanation":"in 演算子で確認"},
{"question":"31. 'Hello World' を大文字にせよ",
"answer":"HELLO WORLD",
"explanation":".upper() で変換"},
{"question":"32. 'HELLO WORLD' を小文字にせよ",
"answer":"hello world",
"explanation":".lower() で変換"},
{"question":"33. 'python' の文字数は?",
"answer":"6",
"explanation":"len() で取得"},
{"question":"34. 'Python' の先頭と末尾を結合せよ",
"answer":"Pn",
"explanation":"文字列インデックスで取得し結合"},
{"question":"35. 'Python' の 'o' の数を数えよ",
"answer":"1",
"explanation":".count() で文字の出現回数を取得"},
# 応用編(36〜50問)
{"question":"36. 'apple,banana,cherry' をリスト化して連結で答えよ",
"answer":"applebananacherry",
"explanation":"split(',') で分割"},
{"question":"37. '2025-11-05' から年、月、日を連結で答えよ",
"answer":"20251105",
"explanation":"split('-') で分割して結合"},
{"question":"38. 'Hello World' の 'l' を 'L' に置換せよ",
"answer":"HeLLo WorLd",
"explanation":".replace() で置換"},
{"question":"39. 'Hello World' の単語数はいくつ?",
"answer":"2",
"explanation":"split() で分割して len() で数える"},
{"question":"40. 'I have 2 apples' から数字を連結して答えよ",
"answer":"2",
"explanation":"re.findall() で数字を抽出"},
{"question":"41. '2025-11-05' を '05/11/2025' に変換せよ",
"answer":"05/11/2025",
"explanation":"split() で分割し f文字列で整形"},
{"question":"42. 'Python' を1文字ずつ連結で答えよ",
"answer":"Python",
"explanation":"for ループで各文字取得"},
{"question":"43. 'a-b-c-d' を 'a/b/c/d' に置換せよ",
"answer":"a/b/c/d",
"explanation":".replace('-', '/') で置換"},
{"question":"44. 'PythonPython' の 'Python' を 'Java' に置換せよ",
"answer":"JavaJava",
"explanation":".replace() で置換"},
{"question":"45. 'Hello World' を逆順かつ大文字で答えよ",
"answer":"DLROW OLLEH",
"explanation":"[::-1] で逆順、.upper() で大文字"},
{"question":"46. ' trim this ' の空白を削除し文字数を答えよ",
"answer":"9",
"explanation":".strip() で空白削除、len() で数える"},
{"question":"47. 'python,java,c++' をリスト化して3番目を答えよ",
"answer":"c++",
"explanation":"split(',') で分割しインデックスで取得"},
{"question":"48. 'Hello World' の 'World' を 'Python' に置換せよ",
"answer":"Hello Python",
"explanation":".replace() で置換"},
{"question":"49. 'abc123def456' から数字だけを連結して答えよ",
"answer":"123456",
"explanation":"re.findall() で数字を抽出して結合"},
{"question":"50. 'Python' の文字数を答えよ",
"answer":"6",
"explanation":"len() で文字数取得"}
]
# 自動採点ループ
score = 0
for idx, prob in enumerate(problems):
print("\n問題", idx+1)
print(prob["question"])
user_ans = input("あなたの答え: ").strip()
# 正解判定(文字列比較)
correct = str(prob["answer"]).strip()
if user_ans == correct:
print("✅ 正解!")
score += 1
else:
print("❌ 不正解")
print("正解:", correct)
print("解説:", prob["explanation"])
print("\n=== 結果 ===")
print(f"正解数: {score}/{len(problems)}")
print(f"正解率: {score/len(problems)*100:.1f}%")
Pythonこのファイルの特徴
- ユーザーが答えを入力 → 自動で正誤判定
- 解説を即時表示 → 学習に最適
- 基礎〜中級〜応用すべて50問対応
- 実行後に正解数と正解率を表示
では、先ほどの自動採点付きファイルに ヒント表示と難易度別正解率集計機能 を追加したバージョンを作ります。
特徴:
- 各問題の前に ヒント表示(ユーザーが希望すれば表示)
- 基礎・中級・応用の正解数・正解率を まとめて表示
- ユーザーが途中でヒントを見ながら学習できる
- 実行後に総合結果と難易度別結果を確認可能
# ===============================================
# Python文字列演習50問(ヒント&難易度別採点版)
# ===============================================
import re
# 問題データ(問題文、正解、解説、レベル、ヒント)
problems = [
# 基礎編
{"level":"基礎","question":"1. 'Hello' と 'World' を連結してください",
"answer":"HelloWorld","explanation":"+ 演算子で文字列をつなげます","hint":"例: 'Hello' + 'World'"},
{"level":"基礎","question":"2. 'Hi' を 4 回繰り返してください",
"answer":"HiHiHiHi","explanation":"* 演算子で繰り返せます","hint":"例: 'Hi' * 4"},
{"level":"基礎","question":"3. 'apple' が 'pineapple' に含まれるか? True/False",
"answer":"True","explanation":"in 演算子で確認可能","hint":"'apple' in 'pineapple'"},
# ...(中略、全50問同様に入れる)
]
# 正解集計用
score_total = 0
score_level = {"基礎":0,"中級":0,"応用":0}
count_level = {"基礎":0,"中級":0,"応用":0}
for idx, prob in enumerate(problems):
print(f"\n問題 {idx+1} ({prob['level']})")
print(prob["question"])
# レベルごとの問題数カウント
count_level[prob["level"]] += 1
# ヒント表示
show_hint = input("ヒントを表示しますか? (y/n): ").strip().lower()
if show_hint == "y":
print("ヒント:", prob["hint"])
user_ans = input("あなたの答え: ").strip()
correct = str(prob["answer"]).strip()
if user_ans == correct:
print("✅ 正解!")
score_total += 1
score_level[prob["level"]] += 1
else:
print("❌ 不正解")
print("正解:", correct)
print("解説:", prob["explanation"])
# 結果表示
print("\n=== 総合結果 ===")
print(f"正解数: {score_total}/{len(problems)}")
print(f"正解率: {score_total/len(problems)*100:.1f}%")
print("\n=== 難易度別結果 ===")
for lvl in ["基礎","中級","応用"]:
total = count_level[lvl]
correct = score_level[lvl]
rate = correct/total*100 if total>0 else 0
print(f"{lvl}: {correct}/{total} 正解 ({rate:.1f}%)")
Python使い方
- ファイル名例:
string_practice_hint.py - 実行すると順番に50問が表示される
- ヒントを表示したい場合は
yを入力 - 答えを入力すると、正誤判定と解説が即時表示
- 全問終了後に 総合結果 + 難易度別正解率 が確認できる
💡この形式にすると、初心者でもヒントを見ながら自分の理解度を確認できる完全学習ノートになります。
