PCEP-30-02 — Python Institute PCEP - Certified Entry-Level Python Programmer Cheat Sheet

Compact independent Cheat sheet for Python Institute PCEP - Certified Entry-Level Python Programmer (PCEP-30-02): syntax, types, operators, collections, functions, exceptions, and code tracing.

Use this independent Cheat Sheet for the Python Institute PCEP - Certified Entry-Level Python Programmer (PCEP-30-02) to refresh Python fundamentals and trace short code snippets quickly. Focus on exact output, exact exception behavior, type conversions, mutability, and control-flow paths.

Use the tables for a quick pre-exam check. Expand a topic’s notes for explanations, examples, and additional distinctions.

Rapid Scope Map

AreaKnow how to doCommon exam trap
Python basicsRecognize source code, interpreter, syntax, indentation, comments, literals, variablesAssuming indentation is cosmetic; it defines blocks
I/OUse print() and input()input() always returns str
Data typesWork with int, float, bool, str, None, lists, tuples, dictionariesConfusing mutation with reassignment
OperatorsArithmetic, comparison, logical, bitwise, membership, identity** associativity, // with negatives, and/or short-circuiting
Control flowif, elif, else, while, for, range(), break, continue, loop elseLoop else runs only when no break occurs
CollectionsIndex, slice, iterate, mutate lists/dicts, use tuples/stringsSlices tolerate out-of-range indices; direct indexing does not
FunctionsDefine, call, pass arguments, return values, understand scopeMissing return means None
ExceptionsTrace try, except, else, finallyMore specific exceptions must be handled before general ones
ModulesImport modules and namesimport math requires math.sqrt(), but from math import sqrt does not

Python Program Basics

ConceptQuick reference
Source codeHuman-readable .py instructions.
InterpreterExecutes Python code, usually after parsing and compiling it internally to bytecode.
Syntax errorCode cannot be parsed; execution does not start normally.
Runtime exceptionError occurs while executing syntactically valid code.
StatementInstruction such as assignment, if, while, def, import.
ExpressionProduces a value, such as 2 + 3, len(x), x > 0.
VariableName bound to an object; assignment changes a binding.
ObjectRuntime value with type, identity, and value.
CommentStarts with # and continues to end of line.
BlockGroup of indented statements after a header ending with :.
Notes and examples

Syntax Essentials

RuleExampleNotes
Indentation defines blocksif x: ...Consistent indentation is required.
Colon starts compound blockif, elif, else, for, while, def, try, exceptHeader line ends with :.
Case-sensitive namestotal and TotalDifferent identifiers.
Assignment binds namesx = 5Creates or rebinds x.
Multiple assignmenta, b = 1, 2Right side is evaluated before binding.
Swapa, b = b, aNo temporary variable needed.
Chained assignmenta = b = 0Both names refer to same object.
Augmented assignmentx += 1Equivalent in effect to update/rebind, with mutability details for containers.
Line continuationParentheses or \Prefer parentheses for readable continuation.

Identifiers and Keywords

Valid identifiers:

  • May contain letters, digits, and underscores.
  • Cannot start with a digit.
  • Cannot be a reserved keyword.
  • Are case-sensitive.

Core Python 3 reserved words include:

False None True and as assert async await break class continue def del elif else
except finally for from global if import in is lambda nonlocal not or pass raise
return try while with yield

Input, Output, and Basic Built-ins

print()

FeatureExampleResult
Basic outputprint("Hi")Prints Hi and a newline.
Multiple argumentsprint("A", "B")Default separator is one space.
Custom separatorprint("A", "B", sep="-")A-B
Custom endingprint("A", end="!")Ends with ! instead of newline.
Notes and examples
print("A", "B", sep="-", end="!")
print("C")
## A-B!C

input()

PatternMeaning
name = input()Reads a line as str.
age = int(input())Reads text, converts to int.
x = float(input("x: "))Prompt is printed; result is still text until converted.

Trap:

x = input()
print(x + 1)      # TypeError if x is str
print(int(x) + 1) # Correct if x contains an integer literal

High-Use Built-ins

Built-inUseTrap
len(x)Length of string/list/tuple/dictNot for numbers.
type(x)Inspect typeExam snippets may rely on exact type.
int(x)Convert to integerint(3.9) truncates toward zero; int("3.9") raises ValueError.
float(x)Convert to floating-pointFloating precision is approximate.
str(x)Convert to stringUseful before concatenation with strings.
bool(x)Truth-value conversionEmpty/zero/None are false-like.
range()Generate integer sequenceStop is excluded.
list(x)Convert iterable to listCreates a new list from iterable elements.
sorted(x)Returns sorted listDoes not mutate original iterable.
sum(x)Sum numeric iterableFails on non-numeric elements.
min(x), max(x)Minimum/maximumEmpty sequence raises ValueError.

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") displays A B.
  • print("A", "B", sep="-") displays A-B.
  • print("A", end="") does not move to a new line after A.

input()

input() reads text and returns a string.

GoalCorrect pattern
Read textname = input()
Read integern = int(input())
Read floatx = float(input())
Compare numeric inputConvert first, then compare

Common mistake: input() does not automatically parse numbers.

Data Types, Literals, and Conversions

TypeLiteral examplesKey behavior
int0, 42, -7, 0b1010, 0o12, 0xAArbitrary-size integer.
float3.14, 2.0, 1e3, -0.5Approximate real number.
boolTrue, FalseBoolean; participates like 1 and 0 in arithmetic.
str"abc", 'abc', """multi"""Immutable sequence of characters.
NoneTypeNoneRepresents absence of value.
list[1, 2, 3]Mutable ordered sequence.
tuple(1, 2), (1,)Immutable ordered sequence.
dict{"a": 1}Mutable key-value mapping.
Notes and examples

Truthiness

ValueTruth value
False, NoneFalse
0, 0.0False
"", [], (), {}False
Most other valuesTrue
print(bool(""))     # False
print(bool("0"))    # True
print(bool([]))     # False
print(bool([0]))    # True

String Escapes

EscapeMeaning
\nNewline
\tTab
\\Backslash
\'Single quote
\"Double quote

Operators and Precedence

Operator Groups

CategoryOperatorsNotes
Arithmetic+, -, *, /, //, %, **/ always produces float.
Unary+x, -x, ~x~x is bitwise inversion.
Comparison<, <=, >, >=, ==, !=Result is bool.
Logicalnot, and, orShort-circuit evaluation.
Bitwise integer&, ^, |, ~, <<, >>Operate on integers.
Membershipin, not inWorks with strings, lists, tuples, dict keys.
Identityis, is notObject identity, not value equality.
Assignment=, +=, -=, *=, etc.Assignment is a statement in basic Python usage.
Notes and examples

Precedence: High to Low

LevelOperators / constructsExam notes
1Parentheses, indexing, slicing, callsUse parentheses to remove ambiguity.
2**Right-associative.
3Unary +, -, ~Watch -2 ** 2.
4*, /, //, %Same level, left-to-right.
5+, -Addition/subtraction or sequence concat.
6<<, >>Bit shifts.
7&Bitwise AND.
8^Bitwise XOR.
9|Bitwise OR.
10Comparisons, in, isChaining allowed: a < b < c.
11notLower than comparisons.
12andShort-circuits.
13orShort-circuits.

Arithmetic Traps

print(2 ** 3 ** 2)      # 512, because 2 ** (3 ** 2)
print(-2 ** 2)          # -4, because -(2 ** 2)
print((-2) ** 2)        # 4

print(7 / 2)            # 3.5
print(7 // 2)           # 3
print(7 % 2)            # 1

print(-7 // 3)          # -3, floor division
print(-7 % 3)           # 2

Remember:

  • // is floor division, not simple truncation for negative values.
  • % is the remainder consistent with floor division.
  • + concatenates sequences only when types are compatible, such as str + str or list + list.
  • "3" + "4" is "34", not 7.
  • "ha" * 3 is "hahaha".

Logical Operators

ExpressionBehavior
not xBoolean negation.
x and yIf x is false-like, returns x; otherwise returns y.
x or yIf x is true-like, returns x; otherwise returns y.
print(0 and 5)      # 0
print(3 and 5)      # 5
print("" or "x")    # x
print("a" or "x")   # a

Equality vs Identity

OperatorQuestion answeredExample
==Do values compare equal?[1, 2] == [1, 2] is True.
isAre both names bound to the same object?Use for None: x is None.
a = [1, 2]
b = [1, 2]
c = a

print(a == b)   # True
print(a is b)   # False
print(a is c)   # True

Arithmetic operators

OperatorMeaningExample result
+Addition or string/list concatenation2 + 3 gives 5; "a" + "b" gives "ab"
-Subtraction5 - 2 gives 3
*Multiplication or repetition3 * 4 gives 12; "ha" * 3 gives "hahaha"
/True division5 / 2 gives 2.5
//Floor division5 // 2 gives 2; -5 // 2 gives -3
%Modulo5 % 2 gives 1
**Exponentiation2 ** 3 gives 8

Operator precedence to remember

Higher priority firstNotes
ParenthesesAlways 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<, <=, >, >=, ==, !=
notBoolean negation
andBoolean conjunction
orBoolean disjunction

Common traps:

  • 2 + 3 * 4 is 14, not 20.
  • (2 + 3) * 4 is 20.
  • 5 / 2 is 2.5, not 2.
  • 5 // 2 is 2.
  • -5 // 2 floors downward to -3, not toward zero.
  • 2 ** 3 ** 2 is evaluated right-associatively: 2 ** (3 ** 2).

Control Flow

Conditional Statements

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
else:
    grade = "C"
Notes and examples
RuleNotes
if starts condition chainEvaluated first.
elif means “else if”Checked only if previous conditions were false.
else is optionalRuns when no prior condition matched.
Conditions use truthinessAny expression can be tested.
x = 5
if x > 0:
    print("positive")
if x > 3:
    print("large")
else:
    print("small")

## positive
## large

The else belongs only to the second if.

while Loops

n = 3
while n > 0:
    print(n)
    n -= 1

Use while when the number of iterations depends on a condition, sentinel value, or state change.

for Loops and range()

FormValues produced
range(5)0, 1, 2, 3, 4
range(2, 6)2, 3, 4, 5
range(2, 10, 3)2, 5, 8
range(5, 0, -2)5, 3, 1

Rules:

  • Start is included.
  • Stop is excluded.
  • Step cannot be zero.
  • Negative step counts down.
for i in range(3):
    print(i)
## 0
## 1
## 2

break, continue, and Loop else

ConstructMeaning
breakExit nearest loop immediately.
continueSkip rest of current iteration; continue with next iteration.
loop elseRuns when loop finishes normally, not when exited by break.
for x in [1, 2, 3]:
    if x == 4:
        print("found")
        break
else:
    print("not found")

## not found
i = 0
while i < 5:
    i += 1
    if i == 3:
        continue
    print(i)

## 1
## 2
## 4
## 5

Choosing a Control Structure

NeedChooseReason
One of several branchesif / elif / elseConditional selection.
Count-controlled iterationfor i in range(...)Known integer sequence.
Iterate over itemsfor item in collectionDirect traversal.
Repeat until condition changeswhileUnknown iteration count.
Stop search earlybreakAvoid unnecessary iterations.
Skip selected itemcontinueContinue loop without running remaining body.
Detect unsuccessful searchloop elseExecutes only when no break.
Empty placeholder blockpassSyntactically valid no-op.

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.
  • break exits the nearest loop.
  • continue skips to the next iteration check.

Common trace method:

  1. Write the initial variable values.
  2. Check the loop condition.
  3. Execute the body line by line.
  4. Record updates.
  5. Repeat until the condition fails or break runs.

for loops

A for loop iterates over an iterable such as a string, list, tuple, dictionary, or range().

PatternMeaning
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

ExpressionValues
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.

SituationLoop else runs?
Loop condition becomes false naturallyYes
for loop exhausts iterableYes
break executesNo
continue executes but loop later finishes normallyYes

This is a frequent candidate mistake because loop else is not the same as if / else.

Collections Cheat Sheet

Sequence Indexing and Slicing

Applies to strings, lists, and tuples.

OperationMeaning
seq[i]Element at index i; raises IndexError if out of range.
seq[-1]Last element.
seq[a:b]Slice from a inclusive to b exclusive.
seq[a:b:c]Slice with step c.
seq[:]Shallow copy of full sequence.
seq[::-1]Reversed sequence.
Notes and examples
s = "Python"

print(s[0])        # P
print(s[-1])       # n
print(s[1:5:2])    # yh
print(s[::-1])     # nohtyP

Traps:

  • s[99] raises IndexError.
  • s[2:99] is allowed and stops at the end.
  • Slice stop is excluded.
  • A slice step of 0 raises ValueError.

Strings

Operation / methodExampleNotes
Concatenate"Py" + "thon"Both operands must be strings.
Repeat"ha" * 3Produces "hahaha".
Membership"y" in "Python"Returns True.
Lengthlen("abc")Returns 3.
Case conversion"Ab".lower()Returns new string.
Strip whitespace" x ".strip()Returns "x".
Replace"abab".replace("a", "x")Returns "xbxb".
Find"abc".find("b")Returns index or -1.
Split"a,b".split(",")Returns ["a", "b"].
Join",".join(["a", "b"])Returns "a,b".

String immutability trap:

s = "cat"
## s[0] = "b"       # TypeError
s = "b" + s[1:]    # Rebinds s to "bat"

Lists

Operation / methodEffectReturn value
lst[i]Access elementElement
lst[i] = xReplace elementNone; statement
lst.append(x)Add one item at endNone
lst.extend(xs)Add all items from iterableNone
lst.insert(i, x)Insert before index iNone
lst.remove(x)Remove first matching valueNone; ValueError if absent
lst.pop()Remove and return last itemRemoved item
lst.pop(i)Remove and return item at index iRemoved item
lst.clear()Remove all itemsNone
lst.sort()Sort list in placeNone
lst.reverse()Reverse in placeNone
del lst[i]Delete item at indexStatement
x in lstMembership testbool

Mutation trap:

nums = [3, 1, 2]
result = nums.sort()

print(nums)    # [1, 2, 3]
print(result)  # None

Aliasing trap:

a = [1, 2]
b = a
c = a[:]

b.append(3)

print(a)  # [1, 2, 3]
print(c)  # [1, 2]

Tuples

PatternMeaning
t = (1, 2, 3)Tuple with three elements.
t = 1, 2, 3Tuple packing also works.
one = (1,)One-element tuple.
not_tuple = (1)Just integer 1.
a, b = (10, 20)Tuple unpacking.

Tuple rules:

  • Tuples are immutable.
  • You can index, slice, iterate, use len(), in, .count(), and .index().
  • A tuple can contain mutable objects, but the tuple’s element bindings cannot be reassigned.
t = ([1, 2], 3)
t[0].append(4)

print(t)  # ([1, 2, 4], 3)

Dictionaries

OperationExampleNotes
Created = {"a": 1, "b": 2}Key-value pairs.
Accessd["a"]Raises KeyError if key absent.
Safe accessd.get("x")Returns None by default if absent.
Default accessd.get("x", 0)Returns 0 if absent.
Add/replaced["c"] = 3Existing key is overwritten.
Deletedel d["a"]Raises KeyError if key absent.
Membership"a" in dTests keys, not values.
Keysd.keys()View of keys.
Valuesd.values()View of values.
Itemsd.items()Key-value pairs.

Dictionary traps:

d = {"a": 1, "b": 2}

print("a" in d)       # True
print(1 in d)         # False, values are not tested
print(d.get("x"))     # None
## print(d["x"])       # KeyError

Keys must be hashable, so common safe key types include strings, numbers, and tuples of hashable elements. Lists cannot be dictionary keys.

Strings

Strings are immutable sequences.

Indexing and slicing

ExpressionMeaning
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":

ExpressionResult
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 modify s.

String operators and methods

OperationReview point
+Concatenates strings
*Repeats strings
inChecks 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

OperationMeaning
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 lstMembership test

Mutability and aliasing

If two variables refer to the same list, changing through one name affects the other.

PatternResult
b = ab 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/functionBehavior
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.

ConceptReview point
Creation(1, 2, 3)
Single-element tuple(1,), not (1)
IndexingSame style as lists
ImmutabilityCannot assign to t[0]
Can contain mutable objectsThe 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.

OperationMeaning
d[key]Retrieves value for key; error if missing
d[key] = valueAdds or updates a key-value pair
key in dChecks 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:

  • in checks 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 and Scope

Defining and Calling Functions

def area(width, height):
    return width * height

print(area(3, 4))  # 12
Notes and examples
ConceptQuick reference
Definitiondef name(parameters): creates a function object.
Callname(arguments) executes the function.
return valueExits function and sends value to caller.
No returnFunction returns None.
return aloneReturns None.
Function bodyDoes not run until function is called.

Parameters and Arguments

PatternExampleNotes
Positionalf(1, 2)Matched by position.
Keywordf(x=1, y=2)Matched by name.
Mixedf(1, y=2)Positional arguments come first.
Default valuedef f(x=0):Used when argument omitted.
Invalid duplicatef(1, x=2)TypeError if x got two values.
def power(base, exponent=2):
    return base ** exponent

print(power(3))       # 9
print(power(3, 3))    # 27
print(power(exponent=3, base=2))  # 8

Scope Rules

Scope behaviorExample / note
Local variableAssigned inside a function by default.
Global variableDefined at module level.
Read globalA function can read a global if not shadowed locally.
Rebind globalRequires global name inside function.
ShadowingLocal name can hide global name.
x = 10

def show():
    print(x)

show()  # 10

Scope trap:

x = 10

def bad():
    # print(x)  # UnboundLocalError if executed before local assignment
    x = 5
    print(x)

bad()      # 5
print(x)   # 10

Global rebinding:

count = 0

def inc():
    global count
    count += 1

inc()
print(count)  # 1

Mutable Argument Side Effects

def add_item(items):
    items.append("x")

data = []
add_item(data)

print(data)  # ['x']

A function can mutate a mutable object passed to it even without returning that object.

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.
  • return sends a value back to the caller and exits the function.
  • If no return runs, the function returns None.

Common mistake: confusing displayed output with returned value.

Function behaviorEffect
Uses print(x)Displays x, returns None unless another return exists
Uses return xGives x back to the caller
Reaches end without returnReturns None
Executes return inside a loopLeaves the entire function, not just the loop

Parameters and arguments

TypeExample ideaReview point
Positionalf(1, 2)Matched by order
Keywordf(a=1, b=2)Matched by name
Defaultdef f(x=0):Used when argument omitted
Mixedf(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 ideaMeaning
Local variableAssigned inside a function; normally visible only there
Global variableDefined at top level
Name lookupPython looks for local names before outer/global names
Assignment inside functionCreates or updates a local name unless explicitly declared otherwise

Candidate mistake: assuming assignment inside a function automatically changes a global variable.

Exceptions

Basic Structure

try:
    number = int(input())
    result = 10 / number
except ValueError:
    print("not an integer")
except ZeroDivisionError:
    print("division by zero")
else:
    print(result)
finally:
    print("done")
Notes and examples
ClauseRuns when
tryCode being protected is attempted.
except SomeErrorMatching exception occurs in try.
elseNo exception occurs in try.
finallyAlways runs after try/except/else path.

Common Exceptions

ExceptionTypical cause
SyntaxErrorInvalid Python syntax; parse-time problem.
IndentationErrorInvalid indentation.
NameErrorName is not defined.
TypeErrorOperation used with incompatible type.
ValueErrorCorrect type, invalid value, such as int("abc").
ZeroDivisionErrorDivision or modulo by zero.
IndexErrorSequence index out of range.
KeyErrorMissing dictionary key.
AttributeErrorObject has no requested attribute/method.
ImportError / ModuleNotFoundErrorImport cannot be completed.

Exception Matching Traps

TrapCorrect habit
General handler firstPut specific exceptions before broader ones.
Assuming else always runselse runs only if try has no exception.
Assuming finally means successfinally runs even after an exception.
Catching wrong exceptionKnow difference between TypeError and ValueError.
try:
    x = int("abc")
except ZeroDivisionError:
    print("zero")
except ValueError:
    print("value")

## value

Basic exception handling

try / except lets code handle runtime errors.

Review points:

  • Code in try runs first.
  • If a matching exception occurs, the matching except block runs.
  • If no exception occurs, except blocks are skipped.
  • Code after the whole structure continues unless the exception is unhandled or the program exits.

Common exception types to recognize:

ExceptionTypical cause
ZeroDivisionErrorDivision or modulo by zero
ValueErrorCorrect type but invalid value, such as int("abc")
TypeErrorOperation on incompatible types, such as "3" + 4
IndexErrorList/string/tuple index out of range
KeyErrorMissing dictionary key
NameErrorName used before being defined

Exception trap patterns

PatternWhat to watch
Error before tryIt will not be caught by that try
Error after try / exceptIt must be handled separately
Multiple except blocksFirst matching handler runs
Broad except firstMore specific later handlers may never run
else with tryRuns only if no exception occurs
finallyRuns 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 Namespaces

Import Forms

FormExampleHow to use imported name
Import moduleimport mathmath.sqrt(9)
Import with aliasimport math as mm.sqrt(9)
Import selected namefrom math import sqrtsqrt(9)
Import selected name with aliasfrom math import sqrt as ss(9)
Import all namesfrom math import *Names copied into current namespace; avoid in real code.
import math

print(math.pi)
print(math.sqrt(16))
from math import sqrt

print(sqrt(16))
import math
## print(sqrt(16))      # NameError
print(math.sqrt(16))   # Correct

Module Execution Guard

def main():
    print("running directly")

if __name__ == "__main__":
    main()
NameMeaning
__name__Built-in module variable.
"__main__"Value when file is run directly.
Imported module__name__ is the module name, not "__main__".

High-Yield Code-Tracing Patterns

Evaluate in This Order

  1. Identify types of each variable.
  2. Apply parentheses, indexing, slicing, and function calls first.
  3. Apply operator precedence.
  4. Track assignments and mutations separately.
  5. For loops, write each iteration value.
  6. For break/continue, mark skipped statements.
  7. For functions, create a local scope and track return value.
  8. For exceptions, stop normal flow at the failing statement and jump to matching handler.

Frequent Output Traps

SnippetResult / issue
print("2" + "3")23
print(2 + 3)5
print("2" + 3)TypeError
print(10 / 2)5.0
print(10 // 2)5
print(3 * "ab")ababab
print("abc"[1])b
print("abc"[-1])c
print([1, 2].append(3))None
print(bool("False"))True
print(1 == True)True
print(1 is True)Usually False; identity is not equality.
Notes and examples

Mutate or Return?

OperationMutates original?Returns useful value?
lst.append(x)YesNo, returns None
lst.sort()YesNo, returns None
lst.reverse()YesNo, returns None
sorted(lst)NoYes, new list
s.upper()No, strings immutableYes, new string
s.replace(a, b)No, strings immutableYes, new string
lst[:]NoYes, shallow copy

Mini Drill Snippets

Trace these until the result is automatic.

x = [1, 2, 3]
y = x
z = x[:]

x.append(4)
y[0] = 9

print(x)
print(z)

## [9, 2, 3, 4]
## [1, 2, 3]
total = 0

for i in range(1, 5):
    if i % 2 == 0:
        continue
    total += i

print(total)

## 4
def f(x):
    if x > 0:
        return x
    return -x

print(f(-3))
print(f(0))
print(f(3))

## 3
## 0
## 3
try:
    print("A")
    print(1 / 0)
    print("B")
except ZeroDivisionError:
    print("C")
finally:
    print("D")

## A
## C
## D

Final Review Checklist

Before test day, make sure you can:

  • Predict output for short Python snippets without running them.
  • Explain why /, //, and % produce different results.
  • Convert safely between str, int, float, and bool.
  • Trace if/elif/else chains exactly.
  • Use range(start, stop, step) without including the stop value.
  • Distinguish break, continue, and loop else.
  • Slice strings/lists/tuples using positive and negative indices.
  • Identify which list methods mutate and return None.
  • Distinguish list aliasing from list copying.
  • Recognize tuple singleton syntax: (x,).
  • Remember that dictionary membership tests keys.
  • Trace function calls, local variables, defaults, and return values.
  • Match common exceptions to likely causes.
  • Use import module versus from module import name correctly.

Next step: complete a timed mixed set of original PCEP-30-02 practice questions, then review every missed item by rewriting the code path, variable values, and final output or exception.

Notes and examples

High-yield tracing checklist

When a question asks “What is the output?” or “What is the result?”, use this order:

  1. Check for syntax or indentation problems. If code cannot parse, execution never starts.
  2. Record initial assignments. Track variable values carefully.
  3. Apply type rules. Decide whether operations are numeric, string, list, or invalid.
  4. Apply precedence. Parentheses first, then operators.
  5. Trace branches. In an if / elif chain, only the first true branch runs.
  6. Trace loops one iteration at a time. Update loop variables after each body execution.
  7. Watch mutation. Lists and dictionaries may change in place.
  8. Separate print() from return. Output and return values are not the same.
  9. Check exception location. Determine whether the error is inside a matching try.
  10. Confirm final output formatting. Spaces, newlines, separators, and end= matter.

What to review first

For PCEP-30-02, prioritize these areas:

AreaWhat to know coldTypical exam trap
Program structureStatements, indentation, comments, basic execution flowTreating indentation as optional
Data typesint, float, str, bool, NoneConfusing display form with stored value
OperatorsArithmetic, comparison, Boolean, assignmentPrecedence and integer division
Input/outputprint(), input(), type conversionForgetting input() returns a string
Control flowif / elif / else, while, for, break, continue, else on loopsMisreading loop termination conditions
CollectionsLists, tuples, dictionaries, stringsMutability, indexing, slicing boundaries
FunctionsDefining, calling, parameters, return values, scopeConfusing print() with return
ExceptionsBasic try / except, common exception typesCatching too broadly or expecting errors at the wrong time
Modules and built-insImport basics and common built-in functionsNamespace 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.

ConceptReview point
Case sensitivityName, name, and NAME are different identifiers
IndentationDefines code blocks after if, loops, functions, and exception handlers
Comments# starts a single-line comment
Statement orderA variable must be assigned before it is used
Dynamic typingA variable name can later refer to a value of a different type
ErrorsSome 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

TypeExampleKey behavior
int7, -3, 0Whole numbers; unlimited practical precision subject to memory
float3.14, 2.0Approximate decimal values
str"Python", 'PCEP'Immutable sequence of characters
boolTrue, FalseSubclass-like behavior with numeric contexts, but treat as logical values
NoneTypeNoneRepresents absence of a value
Notes and examples

Type conversion traps

ExpressionResult ideaTrap
int("10")Converts string to integerFails if the string is not a valid integer literal
float("3.5")Converts string to floatResult is numeric, not text
str(10)Converts integer to string"10" is not the same as 10
bool(0)FalseNonzero numbers are usually True
bool("")FalseNon-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 + 1 is an error unless age is converted.
  • int(age) + 1 performs numeric addition if the input is valid.

Comparisons and Boolean logic

Comparisons

OperatorMeaning
==Equal value
!=Not equal value
<, <=Less than, less than or equal
>, >=Greater than, greater than or equal
isSame object identity, not general equality
inMembership test
Notes and examples

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

ValueBoolean interpretation
0, 0.0False
""False
[], (), {}False
NoneFalse
Nonzero numbersTrue
Non-empty strings/collectionsTrue

Trap: "0" is a non-empty string, so it is True in Boolean context.

Boolean short-circuiting

ExpressionWhat Python may skip
A and BIf A is false, B is not evaluated
A or BIf A is true, B is not evaluated

This matters when the skipped expression would call a function, modify a variable, or raise an exception.

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 / elif chain runs.
  • else has no condition.
  • Indentation determines what belongs to the branch.

Common trap:

  • Multiple separate if statements can all run.
  • An if / elif / else chain runs at most one branch.
StructureBehavior
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:

  1. Match each else to the nearest preceding if at the same indentation level.
  2. Evaluate outer conditions first.
  3. Enter only the block whose condition permits it.

Modules and imports

Python code can use modules to organize reusable functionality.

Import formHow to use it
import mathCall with math.sqrt(9)
from math import sqrtCall with sqrt(9)
import math as mCall 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 unless math was also imported.
  • Aliases replace the original module name in that namespace: after import math as m, use m, not necessarily math.

Built-in functions to recognize

FunctionPurposeTrap
len(x)Length of a sequence or collectionDoes not work on plain integers
type(x)Returns the type objectUseful for reasoning, not usually for production branching
int(x)Converts to integer when validTruncates floats toward zero
float(x)Converts to float when validMay produce approximate values
str(x)Converts to stringEnables concatenation with other strings
bool(x)Converts using truthiness"False" becomes True
range()Produces integer sequence for iterationStop value excluded
sum()Adds numeric iterable valuesFails on mixed incompatible values
min() / max()Finds smallest/largestComparisons must be valid
print()Displays outputReturns None
input()Reads textAlways returns str

Common candidate mistakes

MistakeCorrect thinking
Treating input() as numericIt returns str; convert explicitly
Forgetting indentation defines blocksCount indentation levels before tracing
Confusing / and /// gives float-style true division; // floors
Assuming slices include the stop indexStop index is excluded
Assuming list methods return the changed listMany in-place methods return None
Using is for ordinary equalityUse == for value comparison
Forgetting strings are immutableString methods return new strings
Thinking tuple parentheses always matterFor single-element tuples, the comma matters
Assuming dictionary in checks valuesIt checks keys
Confusing break and continuebreak exits loop; continue skips to next iteration
Missing loop else behaviorLoop else runs only without break
Assuming print() returns printed textprint() returns None
Ignoring short-circuit behaviorRight side may not run
Overlooking aliasingTwo names can refer to the same mutable object

Quick decision tables

“Will this modify the original object?”

OperationModifies 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] = valueYes
t[0] = xInvalid for tuple
Notes and examples

“Will this raise an error?”

SituationLikely result
"3" + "4""34"
"3" + 4TypeError
int("4") + 37
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 / 0ZeroDivisionError

“Which branch runs?”

Code shapeResult
if A and A trueif block runs
if A false, elif B trueelif block runs
if A false, all elif falseelse block runs if present
Separate if statementsEach condition is tested independently
Nested ifInner 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.

Put the review into practice