「実践試験の過去問を探したけど、どこにも見つからない…」

「教材を読んだだけで、本番の問題に対応できるのか不安」

こんなふうに困っていませんか? Python 3 エンジニア認定実践試験には、公式の過去問集がありません。基礎試験のときのように「過去問を何周もして仕上げる」という勉強法がそのまま使えないんですよね。

この記事は、実践試験の勉強を始めた初〜中級者向けです。過去問がない代わりに、主教材の「Python実践レシピ」(技術評論社)を自分で「出力予測問題」に作り変えて、Pythonで答え合わせする方法を紹介します。問題集の選び方ではなく、「手元の教材だけで演習量を増やす」ための自習のやり方です。一緒に見ていきましょう!

過去問がないと何が困るのか

student self study notebook
student self study notebook / Photo by https://kaboompics.com/ via Pexels

まず、実践試験の基本の数字を確認しておきます。

項目 内容
問題数・試験時間 40問・75分
合格ライン 70%
合格率 約48.6%
主教材 Python実践レシピ(技術評論社)
過去問集 公式のものはなし

過去問がないと困るのは、「読んで分かったつもり」と「問題として解ける」の差を確かめる手段がないことです。教材を読んでいるときは「なるほど」と思えても、コードだけを見せられて「実行結果は?」と聞かれると手が止まる。合格率が約48.6%と低めなのは、このギャップも一因だと筆者は感じています。

講師として受講生を見ていても、教材を2周読んだのに模擬試験で6割に届かないという相談は本当に多いです。話を聞くと、ほとんどの方が「読む」だけで「予想して確かめる」をしていません。

教材の1節を「出力予測問題」に変える

イメージとしては、教材のサンプルコードを少しだけ変えて、自分に出題する感じです。つまり「このコードを動かすと何が表示される?」という形にするだけで、教材が問題集に変わります。

やり方のポイントをまとめるとこんな感じです👇

  • 教材のコードを1か所だけ変える(データの順番・回数・引数など)
  • 実行する前に、答えを紙かメモに書く
  • 実行して答え合わせし、外れたら「なぜ外れたか」を1行で書く

たとえば、ジェネレーター式を学んだ節なら、こんな問題が作れます。これ、実行せずに答えられますか?

# 問題:次のコードの実行結果は?(実行せずに予想してから答え合わせ)
scores = [70, 85, 90]
doubled = (s * 2 for s in scores)

print(sum(doubled))
print(max(doubled, default="空"))
ジェネレーターの出力予測問題の実行結果
ジェネレーターの出力予測問題の実行結果

実行すると、1行目は 490、2行目は 空 と表示されました。2行目が「180」だと予想した方も多いのではないでしょうか。ここが重要です👇

  • ジェネレーターは1回最後まで使うと空になる
  • sum() で全部読み切ったので、max() には何も残っていない
  • default を指定していなければ ValueError になる

答え合わせのあとは、正しく動くコードも自分で書いておくと記憶に残ります。

scores = [70, 85, 90]

# 何度も使うならリストにしておく(ジェネレーターは1回使うと空になる)
doubled = [s * 2 for s in scores]

print(sum(doubled))
print(max(doubled, default="空"))

リストにすれば何度でも使えるので、結果は 490 と 180 になります。「問題を作る → 予想する → 外れた理由を書く → 直したコードを書く」の4点セットで、1節分の演習が完成です😊

自作問題をまとめて答え合わせするスクリプト

問題が増えてくると、1問ずつファイルを作って実行するのは大変です。そこで、問題と自分の予想をリストにまとめておき、一気に答え合わせする小さなスクリプトを作りました。

import contextlib
import io
from collections import Counter

# 自作問題:(章のメモ, 問題コード, 自分の予想)
QUESTIONS = [
    ("組み込み関数", """
names = ["佐藤", "鈴木", "高橋"]
scores = [80, 65]
print(list(zip(names, scores)))
""", "[('佐藤', 80), ('鈴木', 65), ('高橋', None)]"),
    ("データ構造", """
x = [[]] * 3
x[0].append(1)
print(x)
""", "[[1], [], []]"),
    ("dataclasses", """
from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
    x: int
    y: int
p = Point(1, 2)
p.x = 10
print(p)
""", "FrozenInstanceError"),
    ("辞書", """
a = {"x": 1, "y": 2}
b = {"y": 20, "z": 30}
print(a | b)
""", "{'x': 1, 'y': 20, 'z': 30}"),
    ("文字列フォーマット", """
print(f"{1234567:,}|{0.5:.1%}")
""", "1,234,567|50.0%"),
]


def run(code):
    """コードを実行し、表示された文字列(例外なら例外名)を返す"""
    buf = io.StringIO()
    try:
        with contextlib.redirect_stdout(buf):
            exec(code, {})
    except Exception as e:
        return type(e).__name__
    return buf.getvalue().strip()


misses = Counter()
for no, (chapter, code, guess) in enumerate(QUESTIONS, start=1):
    actual = run(code)
    ok = actual == guess
    print(f"Q{no} [{chapter}] {'○' if ok else '×'}  予想: {guess} / 実際: {actual}")
    if not ok:
        misses[chapter] += 1

score = len(QUESTIONS) - sum(misses.values())
print(f"\n正解 {score}/{len(QUESTIONS)}  復習する章: {list(misses)}")
自作問題の一括答え合わせの実行結果
自作問題の一括答え合わせの実行結果

ポイントをまとめるとこんな感じです👇

  • contextlib.redirect_stdout で、print() の表示を文字列として受け取る
  • 例外が出る問題は、例外名(FrozenInstanceError など)を予想として書く
  • 外れた問題の「章のメモ」を Counter で数え、復習する章を出す

わざと2問外した予想を入れて実行すると、Q1とQ2が「×」、残りの3問が「○」になり、最後に「正解 3/5」と復習する章が表示されました(実行結果は上の画像のとおりです)。

Q1 は zip() が短いほうに合わせて止まることを、zip_longest() と混同した例です。Q2 は [[]] * 3 が同じリストを3つ参照していることを忘れた例。どちらも「知っているつもり」で外しやすい定番のパターンです。

⚠️ exec() は渡した文字列をそのまま実行します。ここでは自分で書いた問題だけを入れて使ってください。また、辞書の | 演算子は Python 3.9 以降の機能です(筆者は Python 3.13 で確認しました)。

自作問題を続けるコツと、その限界

自作問題は、1節につき1〜2問で十分です。大事なのは数より「予想してから実行する」習慣のほうです。

  • 外れた問題だけ QUESTIONS に残し、1週間後にもう一度解く
  • 予想は表示の形まで正確に書く([1, 2] と (1, 2) は別物)
  • 「エラーになる」と予想したら、例外の種類まで書く

受講生を見ていると、自作問題を始めた方は、エラーの種類を答える問題で特に伸びます。普段なんとなく読み流しているエラーメッセージを、自分で予想するようになるからだと思います。

ただし、自作問題には限界もあります。自分で作る問題は、自分が「気づいた」範囲からしか出せないので、苦手な分野ほど問題が作れません。また、40問・75分という本番の時間配分も練習できません。仕上げの段階では、本番形式の問題で通し演習をしておくと安心です。筆者が運営する本試験形式の模擬試験6回分がある実践試験の対策コースでは、本番と同じ形式で解いて、解説で外れた理由まで確認できるようにしています。

最新の試験要項や教材の版は、受験前に協会公式サイト(pythonic-exam.com)で確認してください。

まとめ

  • 実践試験には公式の過去問集がないので、「読んだつもり」を確かめる手段を自分で用意する
  • 教材のコードを1か所変えて、実行前に結果を予想する問題にする
  • 問題と予想をリストにまとめれば、スクリプトで一気に答え合わせでき、復習する章も分かる
  • 自作問題では本番の時間配分と苦手分野は補いにくいので、仕上げは本番形式の演習で

「過去問がないから勉強しにくい」を「教材がそのまま問題集になる」に変えていきましょう。まずは今日読んだ節から1問、ぜひ試してみてください🚀

よくある質問

Q1. 実践試験の過去問はどこかで手に入りますか?

公式の過去問集はありません。試験の実施要項や公開されている情報は、協会公式サイト(pythonic-exam.com)をご確認ください。

Q2. 自作問題は何問くらい作れば十分ですか?

数の目安より、教材の各節で1〜2問ずつ「予想してから実行する」ことを続けるほうが大切です。外れた問題を繰り返し解き直して、確実に答えられる問題を増やしていきましょう。

Q3. 自作問題だけで合格できますか?

理解を確かめる練習としては効果的ですが、自分が気づいていない分野の問題は作れず、40問・75分の時間配分の練習もできません。仕上げに本番形式の問題で通し演習をしておくと安心です。

\ 受験前に、今の実力を無料でチェック /

本記事の筆者が運営する試験対策の専門サービスでは、本番と同じ形式の模擬試験(基礎・実践・データ分析 各1回分)を無料で受験できます。クレジットカードの登録は不要です。

▶ 試験の全体像・勉強法のまとめは完全ガイドへ

→ 無料で模擬試験を受け取る

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る
Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

もしも

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

FastAPIでWebAPI開発を実践的に学ぶ

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。