DRAFT — under teacher review.
VCAA Pseudocode — Write Structured English, Not Python
The Hamilton and Alexandra College · Year 12 · 2026
If you can already code in Python, pseudocode feels like a step backwards — why write count ← 5 when count = 5 is right there? The answer: VCAA assessors are checking whether you can express an algorithm clearly and independently of any language. Python-flavoured pseudocode loses marks. This page maps every construct you need.
🎬 What is pseudocode?
🎯 Watch for: the core idea — pseudocode describes what the algorithm does in plain, structured steps, without committing to any one programming language.
✍️ While you watch: write down the one sentence that best explains why we bother with pseudocode instead of going straight to code.
The two rules that actually matter
Before the big table, pin these two rules — they matter more than any single symbol:
Be consistent. If you open a block with
BEGIN, close it withENDthroughout. If you useWHILE … ENDWHILE, don't switch toWHILE … END_WHILEtwo lines later.Write at a clear high level. You do not need to encode every trivial detail. "Load
data.csvinto an array of records" is perfectly acceptable pseudocode when it is self-explanatory.
Pseudocode ↔ Python comparison
Program structure and basics
| Pseudocode | Python | Notes |
|---|---|---|
START … STOP or BEGIN … END |
(not required) | Brackets a whole program or subprogram. Pick one style and stick to it. |
count ← 5 |
count = 5 |
Assignment uses a left-arrow ←, not = or :=. |
// comment or # comment |
# comment |
Comments work in pseudocode too — use them. |
Selection
| Pseudocode | Python | Notes |
|---|---|---|
IF condition THENaction_1ELSEaction_2ENDIF |
if condition:action_1else:action_2 |
Must close with ENDIF. Chained: use ELSE IF … THEN. |
CASE OF variablevalue1: action_1value2 TO value3: action_2OTHERWISE action_3ENDCASE |
if variable == value1:action_1elif value2 <= variable <= value3:action_2else:action_3 |
CASE has no direct Python equivalent; use it when there are many branches. |
Iteration
| Pseudocode | Python | Notes |
|---|---|---|
WHILE condition DOaction_1ENDWHILE |
while condition:action_1 |
Pre-test loop. Must close with ENDWHILE. |
REPEATaction_1UNTIL condition |
while True:action_1if condition: break |
Post-test loop — body always runs at least once. |
FOR count ← a TO b STEP 1action_1ENDFOR |
for count in range(a, b+1, 1):action_1 |
Count-controlled. Must close with ENDFOR. |
FOREACH item IN seqaction_1NEXT item |
for item in seq:action_1 |
Iterates over a sequence. Close with NEXT item. |
Operators
| Pseudocode | Python | Notes |
|---|---|---|
= |
== |
Equality test in pseudocode is =, not ==. |
<> |
!= |
Not-equals in pseudocode is <>. Never use != in pseudocode. |
>, <, <=, >= |
>, <, <=, >= |
Same symbols in both. |
AND, OR, NOT |
and, or, not |
Uppercase in pseudocode. |
+, -, *, /, ^ |
+, -, *, /, ** |
Pseudocode uses ^ for exponentiation; Python uses **. |
MOD or % |
% |
Integer remainder. |
DIV |
// |
Integer division. |
Subprograms (methods / functions / procedures)
| Pseudocode | Python | Notes |
|---|---|---|
BEGIN fun(arg1, arg2)action_1RETURN expressionEND |
def fun(arg1, arg2):action_1return expression |
BEGIN/END bracket the subprogram. RETURN ends a function; omit it for a procedure. |
Worked example 1 — a method inside a class
This is the Level-9 OOP pseudocode skill. You are writing a method, not a standalone program, so you use BEGIN/END rather than START/STOP.
Scenario: a ScoreTracker class has a method is_passing that returns whether a student's average score meets a threshold.
BEGIN is_passing(scores, threshold)
total ← 0
FOREACH score IN scores
total ← total + score
NEXT score
average ← total / length(scores)
IF average >= threshold THEN
RETURN True
ELSE
RETURN False
ENDIF
END
Notice:
- Assignment is
←throughout — never=or==. - Not-equals would be
<>if needed (e.g.IF count <> 0 THEN). FOREACH … NEXT itemcloses the loop.IF … THEN … ELSE … ENDIFcloses the selection.- Indentation is consistent.
You do not need to write out every getter and setter in full. If a step is clear — "retrieve the current user record from the database" — that single line is enough. Save detailed pseudocode for the logic that actually matters in your design.
Worked example 2 — one algorithm, any machine
Pseudocode's superpower is that it is language- and machine-independent. Here is a complete algorithm — the wall-follower, or right-hand rule, for escaping a maze — written once and able to run anywhere: in your head, in a software simulation, or on a Lego robot.
The rule is simple: keep your right hand on the wall and never lift it. In any maze whose walls are all connected, following it will always bring you to the exit.

Trace it yourself: start at the top-left entrance and keep your right hand on the wall. Where do you come out? (Background reading: Wikipedia — Maze-solving algorithm.)
The same idea in VCAA pseudocode:
START at the maze entrance
WHILE not at the exit DO
IF the right-hand side is open THEN
// an opening — follow the wall around the corner
turn right
step forward
ELSE IF the way ahead is clear THEN
// keep moving, right hand sliding along the wall
step forward
ELSE IF only the left is open THEN
// wall ahead and on the right
turn left
step forward
ELSE
// dead end — walls on three sides
turn around
ENDIF
ENDWHILE
OUTPUT "Hooray! I escaped the maze!"
There is no Python and no Java here — nothing tied to one language. That is exactly what makes it pseudocode.
Now watch the same rule run on two completely different machines:
🎯 Watch for: the right-hand rule as a software simulation — the logic is identical to the pseudocode above.
🎯 Watch for: the very same rule driving a physical Lego EV3 robot through a real maze — same algorithm, different machine.
Activity — why does the right-hand rule work? Write two or three sentences. Hint: picture a wall that is connected to the outer boundary of the maze. If you trace its edge without ever letting go, can you ever get stuck in a loop — or must you eventually walk the whole of that wall, including the stretch that contains the exit?
Common mistakes
Mistake 1 — Using = or == for assignment
orcount = 5count == 5
Correct: count ← 5. The left-arrow shows data flowing into the variable. Using = is Python; using == is a comparison, not assignment.
Mistake 2 — Using != for not-equals
IF count != 0 THEN
Correct: IF count <> 0 THEN. The != operator belongs only in Python code.
Mistake 3 — Python-only constructs leaking in
orfor item in list:orelifprint(x)
Use FOREACH item IN list … NEXT item, ELSE IF … THEN, and OUTPUT x instead.
Mistake 4 — Forgetting closing keywords
Every block that opens must close. Missing ENDIF, ENDWHILE, ENDFOR, or ENDCASE is a consistency error. Markers notice immediately.
Mistake 5 — Inconsistent block keywords
Opening withBEGINbut closing withSTOP
Pick BEGIN/END or START/STOP and use it everywhere in the same document.
Check Your Understanding
- Rewrite this Python line as valid VCAA pseudocode:
score = score + 1
...
Answer: score ← score + 1 — assignment uses ←, not =.
- A classmate writes
IF x != 0 THEN … ENDIF. Name the mistake and write the corrected line.
...
Answer: != is Python syntax, not pseudocode. Correct: IF x <> 0 THEN … ENDIF. The not-equals operator in VCAA pseudocode is always <>.
- You have a
WHILEloop and anIFstatement nested inside it. List the two closing keywords you need and the order they must appear.
...
Answer: ENDIF closes the inner IF first, then ENDWHILE closes the outer loop. Inner blocks always close before outer blocks.
Credits
- Maze diagram — Grufo, via Wikimedia Commons, licensed GPLv3.
See also
- IPO Charts — Process Means Steps — turn an IPO Process column into formal pseudocode
- C05 Resources
← Back to C05 Home · VCE Software Development Hub
