PCEP-30-02 — Python Institute PCEP - Certified Entry-Level Python Programmer Quick Review
Quick Review for the Python Institute PCEP - Certified Entry-Level Python Programmer (PCEP-30-02), focused on core Python syntax, control flow, collections, functions, exceptions, and common exam traps.
Quick Review purpose
This Quick Review is for candidates preparing for the Python Institute PCEP - Certified Entry-Level Python Programmer (PCEP-30-02) exam from Python Institute. It is designed to refresh the Python fundamentals that often appear in entry-level certification questions before you move into topic drills, mock exams, and detailed explanations.
Use it as an IT Mastery practice guide: review the rules, identify weak spots, then test yourself with original practice questions in a question bank. The goal is not to memorize isolated syntax, but to predict what Python will do in short code fragments.
What to review first
For PCEP-30-02, prioritize these areas:
| Area | What to know cold | Typical exam trap |
|---|---|---|
| Program structure | Statements, indentation, comments, basic execution flow | Treating indentation as optional |
| Data types | int, float, str, bool, None | Confusing display form with stored value |
| Operators | Arithmetic, comparison, Boolean, assignment | Precedence and integer division |
| Input/output | print(), input(), type conversion | Forgetting input() returns a string |
| Control flow | if / elif / else, while, for, break, continue, else on loops | Misreading loop termination conditions |
| Collections | Lists, tuples, dictionaries, strings | Mutability, indexing, slicing boundaries |
| Functions | Defining, calling, parameters, return values, scope | Confusing print() with return |
| Exceptions | Basic try / except, common exception types | Catching too broadly or expecting errors at the wrong time |
| Modules and built-ins | Import basics and common built-in functions | Namespace and call syntax mistakes |
Python execution basics
Python executes code mostly from top to bottom. The exam often uses short snippets where one line changes the meaning of the next.
| Concept | Review point |
|---|---|
| Case sensitivity | Name, name, and NAME are different identifiers |
| Indentation | Defines code blocks after if, loops, functions, and exception handlers |
| Comments | # starts a single-line comment |
| Statement order | A variable must be assigned before it is used |
| Dynamic typing | A variable name can later refer to a value of a different type |
| Errors | Some errors occur before execution; others occur only when the line runs |
Common mistake: assuming Python “declares” variable types. In Python, names refer to objects; the object has the type.
Literals, variables, and basic types
Core types
| Type | Example | Key behavior |
|---|---|---|
int | 7, -3, 0 | Whole numbers; unlimited practical precision subject to memory |
float | 3.14, 2.0 | Approximate decimal values |
str | "Python", 'PCEP' | Immutable sequence of characters |
bool | True, False | Subclass-like behavior with numeric contexts, but treat as logical values |
NoneType | None | Represents absence of a value |
Type conversion traps
| Expression | Result idea | Trap |
|---|---|---|
int("10") | Converts string to integer | Fails if the string is not a valid integer literal |
float("3.5") | Converts string to float | Result is numeric, not text |
str(10) | Converts integer to string | "10" is not the same as 10 |
bool(0) | False | Nonzero numbers are usually True |
bool("") | False | Non-empty strings are usually True, even "False" |
High-yield rule:
input()always returns a string. Convert before numeric comparison or arithmetic.
Example decision:
age = input()gives a string.age + 1is an error unlessageis converted.int(age) + 1performs numeric addition if the input is valid.
Operators and precedence
Arithmetic operators
| Operator | Meaning | Example result |
|---|---|---|
+ | Addition or string/list concatenation | 2 + 3 gives 5; "a" + "b" gives "ab" |
- | Subtraction | 5 - 2 gives 3 |
* | Multiplication or repetition | 3 * 4 gives 12; "ha" * 3 gives "hahaha" |
/ | True division | 5 / 2 gives 2.5 |
// | Floor division | 5 // 2 gives 2; -5 // 2 gives -3 |
% | Modulo | 5 % 2 gives 1 |
** | Exponentiation | 2 ** 3 gives 8 |
Operator precedence to remember
| Higher priority first | Notes |
|---|---|
| Parentheses | Always evaluate first |
** | Exponentiation has high precedence |
Unary +, - | Watch -2 ** 2; exponentiation binds before unary minus |
*, /, //, % | Same level, left to right |
+, - | Same level, left to right |
| Comparisons | <, <=, >, >=, ==, != |
not | Boolean negation |
and | Boolean conjunction |
or | Boolean disjunction |
Common traps:
2 + 3 * 4is14, not20.(2 + 3) * 4is20.5 / 2is2.5, not2.5 // 2is2.-5 // 2floors downward to-3, not toward zero.2 ** 3 ** 2is evaluated right-associatively:2 ** (3 ** 2).
Comparisons and Boolean logic
Comparisons
| Operator | Meaning |
|---|---|
== | Equal value |
!= | Not equal value |
<, <= | Less than, less than or equal |
>, >= | Greater than, greater than or equal |
is | Same object identity, not general equality |
in | Membership test |
For entry-level questions, prefer == for value comparison. Do not use is to compare ordinary numbers or strings unless the question is specifically about identity.
Truthiness
| Value | Boolean interpretation |
|---|---|
0, 0.0 | False |
"" | False |
[], (), {} | False |
None | False |
| Nonzero numbers | True |
| Non-empty strings/collections | True |
Trap: "0" is a non-empty string, so it is True in Boolean context.
Boolean short-circuiting
| Expression | What Python may skip |
|---|---|
A and B | If A is false, B is not evaluated |
A or B | If A is true, B is not evaluated |
This matters when the skipped expression would call a function, modify a variable, or raise an exception.
Input and output
print()
print() displays values. It does not return the displayed value; its return value is None.
High-yield options:
print(a, b)separates values with a space by default.sep=changes the separator.end=changes what is printed after the output, defaulting to a newline.
Common examples:
print("A", "B")displaysA B.print("A", "B", sep="-")displaysA-B.print("A", end="")does not move to a new line afterA.
input()
input() reads text and returns a string.
| Goal | Correct pattern |
|---|---|
| Read text | name = input() |
| Read integer | n = int(input()) |
| Read float | x = float(input()) |
| Compare numeric input | Convert first, then compare |
Common mistake: input() does not automatically parse numbers.
Conditional logic
if, elif, else
Use if for the first condition, elif for additional alternatives, and else as the fallback.
Key rules:
- Only the first true branch in an
if/elifchain runs. elsehas no condition.- Indentation determines what belongs to the branch.
Common trap:
- Multiple separate
ifstatements can all run. - An
if/elif/elsechain runs at most one branch.
| Structure | Behavior |
|---|---|
if A: ... if B: ... | Both tests are independent |
if A: ... elif B: ... | Test B only if A is false |
if A: ... else: ... | Exactly one branch runs |
Nested conditions
Read nested code by indentation, not by visual closeness. Exam questions may align an else with an inner if, not the outer one.
Decision rule:
- Match each
elseto the nearest precedingifat the same indentation level. - Evaluate outer conditions first.
- Enter only the block whose condition permits it.
Loops
while loops
A while loop repeats while its condition is true.
Review points:
- If the condition is false initially, the body does not run.
- A loop variable must usually be updated inside the loop.
- A missing update can create an infinite loop.
breakexits the nearest loop.continueskips to the next iteration check.
Common trace method:
- Write the initial variable values.
- Check the loop condition.
- Execute the body line by line.
- Record updates.
- Repeat until the condition fails or
breakruns.
for loops
A for loop iterates over an iterable such as a string, list, tuple, dictionary, or range().
| Pattern | Meaning |
|---|---|
for ch in "abc" | Iterates over characters: a, b, c |
for item in [10, 20] | Iterates over list elements |
for i in range(3) | Produces 0, 1, 2 |
for i in range(2, 5) | Produces 2, 3, 4 |
for i in range(1, 6, 2) | Produces 1, 3, 5 |
range() traps
| Expression | Values |
|---|---|
range(5) | 0, 1, 2, 3, 4 |
range(1, 5) | 1, 2, 3, 4 |
range(5, 1, -1) | 5, 4, 3, 2 |
range(1, 5, -1) | No values |
range(1, 5, 0) | Error: zero step is invalid |
The stop value is excluded.
Loop else
Python loops can have an else block. It runs if the loop finishes normally. It does not run if the loop exits with break.
| Situation | Loop else runs? |
|---|---|
| Loop condition becomes false naturally | Yes |
for loop exhausts iterable | Yes |
break executes | No |
continue executes but loop later finishes normally | Yes |
This is a frequent candidate mistake because loop else is not the same as if / else.
Strings
Strings are immutable sequences.
Indexing and slicing
| Expression | Meaning |
|---|---|
s[0] | First character |
s[-1] | Last character |
s[1:4] | Characters at indexes 1, 2, 3 |
s[:3] | From start through index 2 |
s[3:] | From index 3 to end |
s[::-1] | Reversed copy |
If s = "Python":
| Expression | Result |
|---|---|
s[0] | "P" |
s[-1] | "n" |
s[1:4] | "yth" |
s[:2] | "Py" |
s[2:] | "thon" |
Common traps:
- Indexing outside the string raises an error.
- Slicing outside the string usually does not raise an error; it adjusts to valid boundaries.
- Strings cannot be changed in place:
s[0] = "J"is invalid. s.upper()returns a new string; it does not modifys.
String operators and methods
| Operation | Review point |
|---|---|
+ | Concatenates strings |
* | Repeats strings |
in | Checks substring membership |
len(s) | Returns number of characters |
s.lower() / s.upper() | Return transformed copies |
s.strip() | Returns copy with surrounding whitespace removed |
s.split() | Returns a list of substrings |
"sep".join(list) | Joins strings with separator |
Trap: "10" + "5" gives "105", not 15.
Lists
Lists are mutable ordered collections.
List basics
| Operation | Meaning |
|---|---|
lst[0] | First element |
lst[-1] | Last element |
lst[1:3] | Slice copy of selected elements |
lst.append(x) | Adds x to the end |
lst.insert(i, x) | Inserts x at index i |
lst.pop() | Removes and returns last element |
lst.pop(i) | Removes and returns element at index i |
del lst[i] | Deletes element at index i |
len(lst) | Number of elements |
x in lst | Membership test |
Mutability and aliasing
If two variables refer to the same list, changing through one name affects the other.
| Pattern | Result |
|---|---|
b = a | b and a refer to the same list |
b = a[:] | b is a shallow copy |
b = list(a) | b is a shallow copy |
a.append(5) | Mutates the list in place |
Common trap: methods such as append(), sort(), and reverse() modify the list and return None.
Sorting
| Method/function | Behavior |
|---|---|
lst.sort() | Sorts the list in place; returns None |
sorted(lst) | Returns a new sorted list |
lst.reverse() | Reverses in place; returns None |
reversed(lst) | Produces a reverse iterator |
Candidate mistake: assigning lst = lst.sort() makes lst become None.
Tuples
Tuples are immutable ordered collections.
| Concept | Review point |
|---|---|
| Creation | (1, 2, 3) |
| Single-element tuple | (1,), not (1) |
| Indexing | Same style as lists |
| Immutability | Cannot assign to t[0] |
| Can contain mutable objects | The tuple is immutable, but a contained list may still be mutated |
Common trap: parentheses alone do not make a tuple; the comma matters for a single-element tuple.
Dictionaries
Dictionaries store key-value pairs and are mutable.
| Operation | Meaning |
|---|---|
d[key] | Retrieves value for key; error if missing |
d[key] = value | Adds or updates a key-value pair |
key in d | Checks whether key exists |
d.get(key) | Returns value or None if missing |
d.get(key, default) | Returns value or default if missing |
del d[key] | Deletes key-value pair |
d.keys() | View of keys |
d.values() | View of values |
d.items() | View of key-value pairs |
Common traps:
inchecks keys, not values.- Keys must be hashable; lists cannot be dictionary keys.
- Accessing a missing key with
d[key]raises an error. - Assigning to an existing key overwrites the old value.
Functions
Function definition and call
A function definition creates a callable object. The body runs only when the function is called.
Key rules:
- Parameters are names used inside the function.
- Arguments are values passed during the call.
returnsends a value back to the caller and exits the function.- If no
returnruns, the function returnsNone.
Common mistake: confusing displayed output with returned value.
| Function behavior | Effect |
|---|---|
Uses print(x) | Displays x, returns None unless another return exists |
Uses return x | Gives x back to the caller |
Reaches end without return | Returns None |
Executes return inside a loop | Leaves the entire function, not just the loop |
Parameters and arguments
| Type | Example idea | Review point |
|---|---|---|
| Positional | f(1, 2) | Matched by order |
| Keyword | f(a=1, b=2) | Matched by name |
| Default | def f(x=0): | Used when argument omitted |
| Mixed | f(1, b=2) | Positional arguments generally come before keyword arguments |
Common traps:
- A required parameter without a default must receive an argument.
- Do not place a non-default parameter after a default parameter in a function definition.
- Mutable default arguments can preserve changes between calls; for entry-level review, recognize this as risky behavior.
Scope
| Scope idea | Meaning |
|---|---|
| Local variable | Assigned inside a function; normally visible only there |
| Global variable | Defined at top level |
| Name lookup | Python looks for local names before outer/global names |
| Assignment inside function | Creates or updates a local name unless explicitly declared otherwise |
Candidate mistake: assuming assignment inside a function automatically changes a global variable.
Exceptions
Basic exception handling
try / except lets code handle runtime errors.
Review points:
- Code in
tryruns first. - If a matching exception occurs, the matching
exceptblock runs. - If no exception occurs,
exceptblocks are skipped. - Code after the whole structure continues unless the exception is unhandled or the program exits.
Common exception types to recognize:
| Exception | Typical cause |
|---|---|
ZeroDivisionError | Division or modulo by zero |
ValueError | Correct type but invalid value, such as int("abc") |
TypeError | Operation on incompatible types, such as "3" + 4 |
IndexError | List/string/tuple index out of range |
KeyError | Missing dictionary key |
NameError | Name used before being defined |
Exception trap patterns
| Pattern | What to watch |
|---|---|
Error before try | It will not be caught by that try |
Error after try / except | It must be handled separately |
Multiple except blocks | First matching handler runs |
Broad except first | More specific later handlers may never run |
else with try | Runs only if no exception occurs |
finally | Runs whether or not an exception occurred |
For the exam, focus on identifying whether an error occurs, where it occurs, and whether the provided handler catches it.
Modules and imports
Python code can use modules to organize reusable functionality.
| Import form | How to use it |
|---|---|
import math | Call with math.sqrt(9) |
from math import sqrt | Call with sqrt(9) |
import math as m | Call with m.sqrt(9) |
from math import * | Imports many names directly; can obscure where names came from |
Common traps:
- After
import math,sqrt(9)alone is not available unless imported directly. - After
from math import sqrt,math.sqrt(9)is not available unlessmathwas also imported. - Aliases replace the original module name in that namespace: after
import math as m, usem, not necessarilymath.
Built-in functions to recognize
| Function | Purpose | Trap |
|---|---|---|
len(x) | Length of a sequence or collection | Does not work on plain integers |
type(x) | Returns the type object | Useful for reasoning, not usually for production branching |
int(x) | Converts to integer when valid | Truncates floats toward zero |
float(x) | Converts to float when valid | May produce approximate values |
str(x) | Converts to string | Enables concatenation with other strings |
bool(x) | Converts using truthiness | "False" becomes True |
range() | Produces integer sequence for iteration | Stop value excluded |
sum() | Adds numeric iterable values | Fails on mixed incompatible values |
min() / max() | Finds smallest/largest | Comparisons must be valid |
print() | Displays output | Returns None |
input() | Reads text | Always returns str |
High-yield tracing checklist
When a question asks “What is the output?” or “What is the result?”, use this order:
- Check for syntax or indentation problems. If code cannot parse, execution never starts.
- Record initial assignments. Track variable values carefully.
- Apply type rules. Decide whether operations are numeric, string, list, or invalid.
- Apply precedence. Parentheses first, then operators.
- Trace branches. In an
if/elifchain, only the first true branch runs. - Trace loops one iteration at a time. Update loop variables after each body execution.
- Watch mutation. Lists and dictionaries may change in place.
- Separate
print()fromreturn. Output and return values are not the same. - Check exception location. Determine whether the error is inside a matching
try. - Confirm final output formatting. Spaces, newlines, separators, and
end=matter.
Common candidate mistakes
| Mistake | Correct thinking |
|---|---|
Treating input() as numeric | It returns str; convert explicitly |
| Forgetting indentation defines blocks | Count indentation levels before tracing |
Confusing / and // | / gives float-style true division; // floors |
| Assuming slices include the stop index | Stop index is excluded |
| Assuming list methods return the changed list | Many in-place methods return None |
Using is for ordinary equality | Use == for value comparison |
| Forgetting strings are immutable | String methods return new strings |
| Thinking tuple parentheses always matter | For single-element tuples, the comma matters |
Assuming dictionary in checks values | It checks keys |
Confusing break and continue | break exits loop; continue skips to next iteration |
Missing loop else behavior | Loop else runs only without break |
Assuming print() returns printed text | print() returns None |
| Ignoring short-circuit behavior | Right side may not run |
| Overlooking aliasing | Two names can refer to the same mutable object |
Quick decision tables
“Will this modify the original object?”
| Operation | Modifies original? |
|---|---|
lst.append(x) | Yes |
lst.sort() | Yes |
lst.reverse() | Yes |
lst + [x] | No, creates a new list |
s.upper() | No, strings are immutable |
s.replace(a, b) | No, returns a new string |
d[key] = value | Yes |
t[0] = x | Invalid for tuple |
“Will this raise an error?”
| Situation | Likely result |
|---|---|
"3" + "4" | "34" |
"3" + 4 | TypeError |
int("4") + 3 | 7 |
int("4.5") | ValueError |
float("4.5") | 4.5 |
[1, 2][5] | IndexError |
[1, 2][1:5] | Valid slice |
{"a": 1}["b"] | KeyError |
{"a": 1}.get("b") | None |
10 / 0 | ZeroDivisionError |
“Which branch runs?”
| Code shape | Result |
|---|---|
if A and A true | if block runs |
if A false, elif B true | elif block runs |
if A false, all elif false | else block runs if present |
Separate if statements | Each condition is tested independently |
Nested if | Inner condition tested only if outer path is entered |
Practice strategy after this review
After reading this page, move directly into original practice questions rather than rereading theory repeatedly. A good IT Mastery question bank should help you:
- Drill one topic at a time, such as operators, loops, lists, functions, or exceptions.
- Practice short code-tracing questions under time pressure.
- Review detailed explanations for both correct and incorrect choices.
- Identify whether mistakes come from syntax, type rules, control flow, or output formatting.
- Revisit weak areas with targeted topic drills before attempting full mock exams.
For Python Institute PCEP - Certified Entry-Level Python Programmer (PCEP-30-02) preparation, the most efficient next step is to complete a small set of topic drills, review every explanation carefully, and then take a mixed mock exam to confirm that you can apply the rules without prompts.
Continue in IT Mastery
Use this Quick Review as a final concept map, then move into IT Mastery for focused topic drills, mixed practice sets, timed mock exams, and detailed explanations. The practice questions are original IT Mastery practice items; they are not official Python Institute questions, copied live-exam content, or exam dumps.