CertGrid CertGrid
Concepts·Certified Entry-Level Python Programmer

PCEP and PCAP Exam Format and Objectives

PCEP and PCAP are sold as a ladder, and most study plans treat them as one exam split across two sittings. They are not. PCEP is 30 questions on syntax, control flow, four collection types and the shape of a function; PCAP is 40 questions of which more than a third are object-oriented programming, a subject PCEP never raises. This is what each one publishes, what each section is worth, and why the question format matters as much as the content.

Start Here Guide 1 of 26 Beginner

The current exams are PCEP-30-02 and PCAP-31-03. Both are examined on Python 3, and neither pins a minor release - which is exactly the problem guide 3 deals with, because the interpreter has moved on since the blueprints were written.

One machine, and nothing on it but an interpreter. Both exams test the language, so there is no cluster, no service and no second host anywhere in this path.
Server NameIP AddressOSRolesCPURAMHDD
RUNNER01192.168.0.27Ubuntu 26.04 LTSPython 3.14.4 - the only machine this path needs2 Core4 GB50 GB

This guide includes

Use this before booking either exam. This matters because PCEP and PCAP are sold as a ladder and most plans treat them as one syllabus - the blueprints overlap heavily, and the three real differences are what should decide your revision.

Before you start

  1. The two exams in numbers

    PCEP-30-02PCAP-31-03
    Questions3040
    Time40 min (+5 NDA/tutorial)65 min (+5 NDA/tutorial)
    Pass mark70%70%
    Sections45
    Objectives1521
    Prerequisitenonenone

    Neither exam requires the other. PCAP is *not* gated on holding PCEP, and you may sit it first - the ladder is a recommendation, not a rule.

    Percentages are easy to feel relaxed about, so here is what 70% costs in answers you actually have to get right. This is also the first code in the path, and it uses the pattern every later sample uses: write a file, run the file.

    bash Example session
    cat > ~/py/passmark.py <<'PY'for total in (30, 40):    need = -(-total * 70 // 100)    print(total, "questions:", need, "correct to pass,", total - need, "wrong allowed")PYpython3 ~/py/passmark.py30 questions: 21 correct to pass, 9 wrong allowed40 questions: 28 correct to pass, 12 wrong allowed

    Expected result21 of 30 on PCEP, 28 of 40 on PCAP.

    Success conditionYou know what passing costs in raw answers rather than in percentages.

  2. PCEP: four blocks, and where the marks are

    BlockWeightObjectives
    1. Computer Programming and Python Fundamentals18%5
    2. Control Flow - Conditional Blocks and Loops29%2
    3. Data Collections - Tuples, Dictionaries, Lists and Strings25%4
    4. Functions and Exceptions28%4

    Read the objective counts against the weights and one thing jumps out: block 2 is 29% of the exam across just two objectives. Those two are if and "perform different types of iterations", which means roughly nine questions of a 30-question exam come out of if/elif/else, while, for, break, continue and the loop else. It is the single densest area in either blueprint.

    Block 1 looks like the easy one and is where careless marks go: numeral systems, operator precedence and integer-versus-float division are all in there, and all three are asked as "what does this print?".

    Here is one, in the exact shape PCEP uses it. Work out your answer before you play the terminal.

    bash Example session
    cat > ~/py/q1.py <<'PY'x = -7print(x // 2)print(x % 2)print(x / 2)PYpython3 ~/py/q1.py-41-3.5

    Expected result-4, then 1, then -3.5.

    Success conditionIf -7 // 2 surprised you, block 1 is not the free section.

  3. PCAP: five sections, and one of them is a third of the exam

    SectionWeightObjectives
    1. Modules and Packages12%5
    2. Exceptions14%2
    3. Strings18%3
    4. Object-Oriented Programming34%6
    5. Miscellaneous - List Comprehensions, Lambdas, Closures, I/O22%5

    Section 4 is 34% on its own - about fourteen of the forty questions - and PCEP does not contain the word "class" anywhere in its blueprint. That is the real gap between the two exams, and it is why this path gives OOP seven guides rather than one.

    Section 5 is the other thing PCEP never touches: comprehensions, lambdas, closures and file I/O, 22% between them.

    A section 4 question, in its usual disguise. Again: decide your answer first.

    bash Example session
    cat > ~/py/q3.py <<'PY'class A:    tally = []     def add(self, v):        self.tally.append(v) a = A()b = A()a.add(1)b.add(2)print(a.tally, b.tally, A.tally)PYpython3 ~/py/q3.py[1, 2] [1, 2] [1, 2]

    Expected result[1, 2] [1, 2] [1, 2] - one list, shared by every instance.

    Success conditionYou have seen the class-variable trap that PCAP's largest section is built on.

  4. The overlap, and the three real differences

    The two blueprints share more than the section titles suggest. Both cover exceptions; both cover strings. What differs is depth.

    SubjectPCEPPCAP
    Exceptionsthe built-in hierarchy, try/except orderingplus raise, assert, finally, exception *objects*, and your own subclasses
    Stringsindexing, slicing, immutability, basic methodsplus code points, encodings, ord/chr, and a named method list
    Functionsdefining, calling, parameters, scope, recursionplus lambdas, closures and comprehensions
    Classesnot examined34% of the exam
    Modulesnot examined12%, including writing your own package
    File I/Onot examinedpart of the 22% miscellaneous section

    The three sections in that table PCEP never examines add up to a number worth seeing rather than estimating:

    bash Example session
    cat > ~/py/gap.py <<'PY'pcap = {"modules": 12, "exceptions": 14, "strings": 18, "oop": 34, "misc": 22}absent_from_pcep = ("modules", "oop", "misc")print("total:", sum(pcap.values()), "percent")print("never examined by PCEP:", sum(pcap[k] for k in absent_from_pcep), "percent")PYpython3 ~/py/gap.pytotal: 100 percentnever examined by PCEP: 68 percent

    Expected resultThe five weights total 100, and the three PCEP never touches total 68.

    Success conditionYou can state exactly how much of PCAP is new material.

  5. What both exams do to slicing

    One more shared subject, because it is asked on both and the answers are counter-intuitive in the same way -7 // 2 is. PCEP objective 3.4 and PCAP section 3 both live here.

    Three slices of the same six-character string. One of them prints nothing at all, and it is not an error.

    bash Example session
    cat > ~/py/q2.py <<'PY's = "abcdef"print(s[::-2])print(s[1:4])print(s[4:1])PYpython3 ~/py/q2.pyfdbbcd

    Expected resultfdb, then bcd, then an empty line.

    Success conditionA negative step and a backwards range both behaved, and neither raised.

  6. How this path is ordered

    The tracks follow a reader's arc rather than the blueprint order, because the blueprints are not teachable in the sequence they are published in - PCAP section 1 (modules) needs functions, which is a PCEP subject.

    TrackServesWhy here
    Start Hereboththis track
    Language FundamentalsPCEPblock 1, plus the operator rules PCAP assumes
    Control FlowPCEPblock 2 - the densest 29% in either exam
    Data CollectionsPCEPblock 3, and the foundation of PCAP's strings section
    Functions and ScopePCEPblock 4, and a prerequisite for every PCAP section
    ExceptionsbothPCEP block 4 then PCAP section 2, in one arc
    Modules and PackagesPCAPsection 1
    Strings in DepthPCAPsection 3
    Object-Oriented PythonPCAPsection 4, the 34%
    Comprehensions and LambdasPCAPsection 5 - comprehensions, lambdas, closures
    Files and StreamsPCAPthe rest of section 5
    Exam Craftbothquestion formats and the traps both exams set
    Command Cheat Sheetsbothone page per exam, for the last week

    If you are sitting PCEP only, the first five tracks plus Exam Craft are the whole syllabus. If you are sitting PCAP, everything from Exceptions onwards is new material and the first five tracks are the assumed background - skim them, do not skip them, because PCAP asks about operator precedence and slicing too.

    guide 2 is next, and it is short: there is one machine and nothing to install on it.

    bash Example session
    python3 --versionPython 3.14.4cat /etc/os-release | head -2PRETTY_NAME="Ubuntu 26.04 LTS"NAME="Ubuntu"

    Expected resultPython 3.14.4 on Ubuntu 26.04 - the interpreter every output in this path came from.

    Success conditionYou know which track you start on and what runs the code.

Troubleshooting

Official sources