Python programs can run without errors and still give untrustworthy results. A mark might be typed as text, a row might contain an empty name, a list might be empty and an output file might accidentally overwrite yesterday’s records. The best Computing learners define what the input must mean before writing code and can explain why their output is valid.
Ministry of Education V3.0 Reference 310 addresses the 2027 G3 Computing K349 Module 2 skills of Python input and output, string processing, lists, file operations, data validation and test design. It contains twenty-six original worked cases, a twelve-stage protocol and eduKate Depth–Load–Transfer diagnostics for independent problem solving.
This independent educational guide is not an official examination script or code used to handle actual school records. All people, marks and text files are fictional. Do not expose passwords, identifiable student records or confidential files while practising.
1. Data Handling Begins Before Syntax
A programmer should state the accepted inputs, expected outputs and conditions under which results are meaningful. For example, sum divided by list length is an average only when the items are numeric and there is at least one accepted item. The code’s apparent simplicity can hide an important unstated precondition.
2. Official 2027 SEC G3 Computing K349 Scope
The 2027 K349 Computing syllabus, Module 2 explicitly lists problem analysis, flowchart interpretation, variables, literals, input(), print(), Python strings and lists, and file reading/writing through open(), read(), readline(), write() and close(). Its lab-based Paper 2 assesses programming and spreadsheets using Python and JupyterLab. The official SEAB directory confirms K349 as G3 Computing. This chapter builds on general computational thinking but has a distinct input-and-output focus.
3. Eight Rooms of Python Data Reasoning
Room one defines the output. Room two defines valid inputs. Room three identifies types and conversions. Room four processes text. Room five manages a list. Room six handles a file. Room seven constructs boundary and error tests. Room eight transfers the verified method to a new dataset.
4. Twelve-Stage Input–Transform–Verify Protocol
Stage 1 — Define the output
First state what a correct answer represents: total, count, mean, filtered names or saved output file. This prevents code from solving a different problem correctly.
Stage 2 — Define acceptable inputs
Clarify whether scores are whole numbers in 0–100, whether names may be blank, and whether a file has one record per line.
Stage 3 — Recognise input types
Python input() returns text. A numerical-looking string needs appropriate validation and conversion before arithmetic.
Stage 4 — Separate splitting from validation
Splitting creates fields, but a line with the correct number of fields may still contain an invalid mark or an empty name.
Stage 5 — Normalise conservatively
Strip surrounding whitespace or standardise case only when the task permits it. Do not erase meaningful data.
Stage 6 — Use string indexing correctly
String positions begin at zero; slice boundaries exclude the end position, and negative indices count from the end.
Stage 7 — Collect multiple records in a list
Decide whether order and duplicates matter. A list of text strings is not automatically a list of numeric quantities.
Stage 8 — Handle empty collections
Do not index the first item, divide by list length, or call min/max on empty data without an explicit policy.
Stage 9 — Choose a suitable control structure
Sequence supports a simple transformation, selection handles validity and loops repeat processing for each record.
Stage 10 — Read and write files intentionally
Identify opening mode, expected file existence, desired read method and whether output should overwrite or append.
Stage 11 — Test boundaries and errors
Compare normal, malformed, blank, negative and maximum permitted values, including repeated records and empty files.
Stage 12 — Audit the result and transfer
Check returned data types, correct output, file closure, limits and privacy; then apply the same process to a new context.
5. A Fictional Class-Records Problem
Greenway Classroom is an invented scenario. A paper file lists fictional names and marks; the task is to count records with nonblank names and whole-number marks from zero through one hundred. The script should calculate a mean only when at least one valid mark remains and describe rejected entries without printing private records. The same idea can be tested by tracing the input manually.
6. Three Important Python Expressions
Type: input('Mark: ') returns text. Collection: scores = [60,70,80], so sum(scores)/len(scores) is 70.0. File: open the required file, read or write intentionally, and close it. The task must specify whether it wants to preserve or replace existing output.
7. Twenty-Six Original Worked Data Cases
8. Worked Example A — Keyboard input is a string
A student types 12 at the prompt; input() returns ’12’, not the integer 12. Adding 3 directly requires conversion to a suitable numeric type.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
9. Worked Example B — Convert only valid numbers
int(’17’) returns 17 but int(‘seventeen’) is invalid. A data-processing solution must define how it responds to failed conversion.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
10. Worked Example C — Unsigned digit check
’12’.isdigit() is True, but ‘-12’.isdigit() is False. A signed-integer format needs a broader rule than simply applying isdigit.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
11. Worked Example D — Removing outside whitespace
‘ Ali ‘.strip() returns ‘Ali’. It does not change an intentional internal space in a two-word name.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
12. Worked Example E — Character count
len(‘MOE’) is 3. Character count is not necessarily identical to byte count for non-ASCII text.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
13. Worked Example F — First character indexing
‘school'[0] is ‘s’; ‘school'[1] is ‘c’. A programmer who begins at index one loses the first character.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
14. Worked Example G — Four-character slice
‘Singapore'[0:4] gives ‘Sing’. Position four is excluded from the slice result.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
15. Worked Example H — Index from the end
‘Python'[-1] is ‘n’. The syntax is useful for the last element but does not remove bounds concerns from other indices.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
16. Worked Example I — Comma-separated fields
‘red,blue,green’.split(‘,’) gives a three-item list. Full CSV files with quoted embedded commas need a more capable parser.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
17. Worked Example J — Whitespace splitting
‘a b’.split() yields [‘a’,’b’]. Whitespace splitting is not identical to forcing one literal space as the delimiter.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
18. Worked Example K — Lower-case conversion
‘cAsE’.lower() returns ‘case’. It may help simple matching but should not be used to alter an original record without a reason.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
19. Worked Example L — Substring check
‘cat’ in ‘concatenate’ is True even though ‘cat’ is not a stand-alone word. A substring test cannot establish word boundaries.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
20. Worked Example M — List length
len([4,6,8]) is three; it counts entries rather than their sum.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
21. Worked Example N — Numeric sum
sum([4,6,8]) is 18. A list of numeric-looking strings is not equivalent to numeric values.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
22. Worked Example O — Minimum
min([7,3,9]) is 3, but min([]) has no available numeric item to return.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
23. Worked Example P — List indexing
For scores=[10,20,30], scores[1] is 20. Position 3 is beyond the three-element list.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
24. Worked Example Q — List slicing
[3,4,5,6][1:3] produces [4,5]. The slice starts at index one and excludes index three.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
25. Worked Example R — Average with a guard
For [2,4,6], sum divided by length is 4.0. An empty list would require a separate result or an error response, not division by zero.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
26. Worked Example S — Mark out of range
103 is a valid integer but invalid for a fictional test score constrained to 0–100. Input validity depends on the application’s requirements.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
27. Worked Example T — Boolean AND
A record is accepted only if its score is numeric AND within the permitted range; passing one condition is insufficient.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
28. Worked Example U — Boolean OR
A fictional category may allow either ‘A’ OR ‘B’. A careless OR that accepts all strings defeats the intended validation.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
29. Worked Example V — Count valid entries
A loop must increment accepted_count only when a record passes validation, not automatically after reading every line.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
30. Worked Example W — Range endpoint
range(1,5) visits 1,2,3,4 and excludes 5. An off-by-one mistake changes a count even if the program runs.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
31. Worked Example X — Reading lines from a file
Repeated readline() calls advance through a file until end-of-file; line endings may be part of the text returned.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
32. Worked Example Y — Writing and appending
Opening a file in ‘w’ mode generally truncates prior content, while ‘a’ mode appends. Choose the behaviour the problem specifies.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
33. Worked Example Z — Validate a fictional class list
[‘Anna’,”, ‘Ben’] contains two nonblank entries and one blank. A rule excluding blanks should count two; a whitespace-only record also needs an explicit decision.
Audit the type, accepted range and boundary case. A correct output should be predicted from the input before relying on a program run.
34. Types determine valid operations
Text, integers and floats can look similar when printed, but they support different operations.
35. Parsing and validation are not the same
Dividing one text line into columns never proves the values are complete, accurate or in range.
36. Strings are sequences
Index and slice operations use zero-based positions with an excluded upper bound.
37. Lists also have boundaries
An empty list and an index one beyond the last element are routine problems to test.
38. Simple string splitting has limits
A quoted comma inside a proper CSV field is a reason to use more than a naive split call.
39. Input rules should be task-specific
Negative numbers may be valid in temperature readings but not in a count of books borrowed.
40. File modes affect existing information
Overwriting must be intentional; appending may be necessary when retaining earlier data.
41. Testing a happy case is insufficient
Malformed, blank, boundary and repeated values reveal different errors from one ordinary record.
42. A program’s output needs meaning
Returning zero after rejecting every entry differs from a valid average of zero; the distinction should be made explicit.
43. Privacy belongs in the design
Use fictional school records and minimal data. Do not publish identifiable students’ information in examples.
44. Cross-subject transfer is possible
Lists and file handling can describe library books, science observations or fictional costs without changing their general logic.
45. Independent checking is a computing habit
Predict expected outputs before running code and compare the results rather than trusting a screen that shows no error message.
46. Misconception Ledger
Common errors include treating input text as a number, indexing from one, including the end of a slice, calculating an average of an empty list, treating text splitting as validation, assuming one successful run proves correctness, overwriting a file without approval and using real personal data for a classroom example. Each error has a specific repair: state the assumption, reproduce the failure on a simple example and retest.
47. Three-Pupil Computing Audit
Student A states input and output conditions. Student B traces text and list transformations by hand. Student C proposes invalid and boundary tests. Rotate roles, then require every student to solve an unseen fictional library-catalogue input task without a model answer. Group agreement is useful, but only independent transfer demonstrates mastery.
48. eduKate Depth–Load–Transfer Diagnostic
Depth tests whether the learner can distinguish string, number, list and file stream. Load combines stored input, parsing, validation, calculation and formatted output. Transfer replaces school scores with shop quantities using the same trustworthy-data principles. Tag errors under problem definition, type, index, file, iteration, validation or test coverage, and repair the earliest weak link.
49. Retrieval and Self-Check
Predict these results: len('ABC') is 3; 'Clementi'[0:3] is ‘Cle’; sum([2,3,5]) is 10; range(2,5) visits 2, 3 and 4; '-2'.isdigit() is False; min([]) has no numeric result; and 'A,B'.split(',') makes two items. A strong pupil explains the rules instead of only reporting numbers.
50. Questions for Tutors and Parents
Ask ‘What type is this value?’, ‘How do you know it is valid?’, ‘What happens if the list is empty?’, ‘Does this file operation overwrite anything?’, ‘What is the highest valid index?’, and ‘Which input would most likely break your design?’ Such questions prompt analysis instead of rapid copying.
51. Frequently Asked Questions
What is K349 Module 2?
The 2027 Computing syllabus includes problem analysis, algorithmic constructs and Python input/output, strings, lists, files and testing within its specified reference.
Does input() give an integer?
No. Python’s input() returns a string; numeric use requires an appropriate validated conversion.
Why does indexing begin at zero?
The first item is at index 0; a sequence of length three has non-negative indices 0, 1 and 2.
Why does split(‘,’) not solve every CSV problem?
It is a simple separator operation and does not automatically respect quoted commas or the full CSV format.
Can the mean of an empty list be zero?
No. Dividing by zero is undefined; the program should handle the empty case explicitly.
What is a boundary test?
It checks a value at or near a specified limit, such as score zero or one hundred.
Is this a generic flowchart lesson?
No. This chapter concentrates on Python’s concrete text, collection and file data operations.
Are the names and test records real?
No. They are original fictional learning examples.
52. Closing Principle
Trustworthy programs start with trustworthy definitions. Read input carefully, preserve intended types, use strings and lists consistently, handle files deliberately, and test the boundaries that make an apparently simple calculation wrong.
Related eduKateSG References and Official Sources
Continue from Reference 203 — Algorithms and Logic and Reference 301 — Data Representation. See MOE V3.0 reference library, the Clementi teaching benchmark, and SEAB 2027 K349 Module 2.
MOE V3.0 Reference Sequence Navigation
Previous reference 309 · MOE V3.0 reference library. Test a different file format with new boundary cases.
