PDST Python Manual 2022
PDST Python Manual 2022
This work is made available under the terms of the Creative Commons Attribution-NonCommercial-
ShareAlike 3.0 Ireland Licence https://creativecommons.org/licenses/by-nc-sa/3.0/ie/.
Please cite as: PDST, Leaving Certificate Computer Science v2.0, Python Workshop, Dublin, 2022
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page ii
Table of Contents
Section 3 – Strings 63
Introduction ……………………………………………………………………… 64
String Indexing ………………………………………………………………….. 66
String Slicing ……………………………………………………………………. 70
String Addition and Multiplication …………………………………………….. 71
String Formatting ………………………………………………………………. 74
Built-in String Commands …………………………………………………….. 76
Coding Systems ……………………………………………………………….. 77
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page iii
Programming Exercises ……………………………………………………….. 79
String Methods ………………………………………………………………….. 80
Additional Notes (Sequences) ………………………………………………… 83
BREAKOUT ACTIVITIES ……………………………………………………… 85
Section 4 – Lists 95
Introduction ……………………………………………………………………… 96
Creating Lists …………………………………………………………………… 97
Common List Operations ………………………………………………………. 99
List Indexing ……………………………………………………………………. 101
List Slicing ……………………………………………………………………….. 105
List Methods …………………………………………………………………….. 109
Two More String Methods (split and splitlines) …………………….. 111
BREAKOUT ACTIVITIES ……………………………………………………… 113
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page iv
Using Functions to Validate Data ……………………………………………... 199
Programming Exercises 6.1 ….……...………………………………………... 201
Recursion ……………...………………………………………………………… 205
Programming Exercises 6.2 ………………...…………………………………. 209
Programming Exercises 6.3 ………………...…………………………………. 210
BREAKOUT ACTIVITY 6.1 (ATM System) ………………………………….. 214
BREAKOUT ACTIVITY 6.2 (Summing Numbers) …………………………... 224
BREAKOUT ACTIVITY 6.3 (Turtle Graphics) ……………………………….. 228
BREAKOUT ACTIVITY 6.4 (Check Digits) …………………………………... 234
Appendices 280
Appendix A: Python Keywords ………………………………………………... 281
Appendix B: Python Built-in Functions ……………………………………….. 281
Appendix C: Python Assignment Operators …………………………………. 282
Appendix D: Python Arithmetic Operators …………………………………… 282
Appendix E: Python Relational Operators …………………………………… 282
Appendix F: Truth Tables for not, and, and or ………………………………. 283
Appendix G: Sample Solutions to Selected Problems ……………………… 284
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page v
Manual Overview
The purpose of this manual is to provide Leaving Certificate Computer Science (LCCS)
teachers with an enhanced knowledge of the Python programming language thereby
enabling them to independently improve their own programming skills.
Although the manual will serve as support material for teachers who attend the Python Skills
Workshops which are a key component in our two-year CPD programme for LCCS teachers,
it is envisaged that its real value will only come into play in the weeks and months after the
workshops have been delivered. Beyond these workshops, the manual may be used as a
basic language reference for Python, but more importantly, as a teaching resource that
might be used to promote in teachers, a constructivist pedagogic orientation towards the
planning and teaching of Python in the LCCS classroom.
Of course there is much more to Python than the material covered in this manual. Among
the more notable topics that are not explicitly addressed are, object-oriented programming
and classes, list comprehensions and exceptions. That said, every effort has been made to
ensure that the content contained here is adequate in order to mediate LCCS in the
classroom.
Throughout the manual there are lots of examples and related exercises. Readers will find it
helpful if they read (and try) the examples before attempting the exercises. The source code
from most of the examples are available to download from the PDST GitHub repository
(https://github.com/pdst-lccs/lccs-python) and links to sample solutions for many of the
programming exercises as are available at the end of the manual.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page vi
A high-level overview of the content of this manual is presented below.
Section 3 – Strings
In this section we will cover strings – basic sequence operations such as concatenation,
multiplication, indexing and slicing will be explained. Example programs will extend thinking
on coding systems and ciphers, and draw on the use the use of built-in functions - ord and
chr. String specific methods and formatting will also be explained. Participants will be given
a hands-on tour of the official online Python reference at https://docs.python.org/3/. The
section concludes with a practical lab/breakout session where participants will be given an
opportunity to write programs to generate web pages and analyse text from live RSS feeds.
Section 4 –Lists
The aim of this section is to extend participants knowledge of sequences through the
concept of lists. Motivation is provided through a discussion on the many real-world
applications of lists. List construction, indexing and slicing are explored in greater detail. The
section describes the most common list specific methods and how to use them. Examples of
how to use split and splitlines to generate lists are provided. The breakout activities
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page vii
at the end of this section includes the use of lists to construct random sentences, further
statistical analysis of data read in from a file of people’s heights, and finally, a program to
use lists as a basis for giving directions to a graphic turtle object.
Section 7 – Dictionaries
The purpose of this chapter is to provide a full overview of the dictionary data structure.
Particular emphasis is placed on discussing the similarities and differences between lists
and dictionaries. The final breakout session – based on frequency counting – is designed to
elicit the computational thinking skills such as abstraction, pattern recognition,
decomposition and algorithmic thinking.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page viii
Conventions
To help with navigation through this manual, the following conventions are used:
Italics are used to highlight important new words and phrases defined
Courier New font is used to denote Python code such as keywords, commands and
variable names
The icons illustrated below are used to highlight different types of information throughout this
manual.
Breakout Group Work. At the end of every section, readers will work
on a number of themed projects relevant to that section.
Reflection log. A space for the reader to reflect on their own learning
and record their thoughts.
Blocks like the one shown above contain Boxes like these contain key messages to
example Python code pass on to novice programming students.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page ix
Section 1
Getting Started
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 1
Installation and Setup
All of the examples in this manual were tested using Python 3.6.4. A standard installation of
Python 3.x and IDLE should be sufficient to run most of the examples and complete the
exercises in this manual. However, for some examples/exercises it will be necessary to
install third party libraries such as pygame and plotly.
Hello World
From your IDE create a new file (File -> New File).
Key in (or copy+paste from GitHub – see Key Point)
the Python statement exactly as it appears here:
KEY POINT: Instead of keying in this code you could click on the octocat and
your browser will direct you to the GitHub repository with this source file. From
this window you can select and copy the code and then paste it into your IDE.
If you see the text Hello World displayed in the shell window congratulations – you are up
and running. The output of the program is displayed in the shell window (output console).
Throughout this manual we will be creating new files, typing in or downloading the example
Python code provided. The aim is to get to the point where we can write our own code.
As teachers we should keep in mind that learning to program for the first time can be tricky –
there can be lots of stuff going on at the same time, and understanding the syntax of Python
can often seem to be more important than the real purpose of programming which is to
automate solutions to well defined problems.
The sooner students overcome the initial syntax barrier, the sooner they can focus on the
skill of problem solving and specifically the skill of using the features of Python to solve
problems.
Teachers should continually emphasise to novice programmers that Python is just a tool,
and the key skill lies in its application to solve problems.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 2
Another point well worth getting across to novice programmers at an early stage is the
difference between programmers and end-users.
Programmers usually work as part of a team. They write and test the code that makes up
a computer system. Student programmers should be encouraged to bear the needs of
the end-user in mind i.e. see the system from the perspective of the end-user.
An end-user is the person (or organisation) for whom a software system is developed.
End-users are the customers and, very often, do not know how to program.
Language Syntax
Most of us are already aware that natural languages such as English, French, German,
Polish etc. have their own rules. These rules make up the language grammar. The syntax of
a language is that part of the grammar which defines how sentences are constructed –
syntax is mostly concerned with legitimate words, symbols and the order in which they are
used.
In a similar way, all programming languages (e.g. Python, Java, JavaScript, C++, PHP, Perl
etc.) have their own syntax – this is called the language syntax.
One important aspect of Python’s syntax is its vocabulary i.e. the words and symbols that
Python understands.
Words can be keywords or commands. The list of all of Python’s 33 keywords is given below
– only some of these will be needed for LCCS.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 3
The most common kinds of symbols in Python are operators – these can be arithmetic or
relational.
Python also understands white spaces (e.g. spaces, tabs, newlines), numbers and strings
(anything enclosed in quotation marks) – more on these later.
All programs must adhere to the syntax of the programming language in which they are
written. When a program does not conform to the language’s syntax it is said to contain a
syntax error. Such programs are said to be syntactically incorrect.
When you try to run a program that has a syntax error, Python displays a syntax error
message.
Comments are a way to tell Python to ignore syntax. They are used by programmers to
improve the readability of their code for the benefit of other programmers. Comments in
Python start with the hash character, # , and extend to the end of the physical line. When
Python comes across the hash character it ignores the rest of the text on that line
Reflection
Reflect on what you have learned about Python so far.
Use the space below to write five things that Python understands.
1.
2.
3.
4.
5.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 4
Basic Python Syntax
We will now take a look at some of the basic syntax rules of Python and illustrate what
happens when these rules are broken.
Print("Hello World")
This is Python’s way of telling the programmer that the program contains a syntax error.
Python keywords and commands must all be typed in lower case.
Experiment!
Try the following line.
Make some changes - what happens?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 5
Syntax Check #2:
Use opening and closing brackets (parentheses) after the print command when you
want to display output. For every opening parenthesis there needs to be a matching
closing parenthesis.
You will see a syntax error displayed in a message box like the one shown below because
the opening parenthesis is missing.
Experiment!
Try each of the following 3 lines separately.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 6
Syntax Check #3:
When you want to display text using the print command, the text must to be enclosed
inside matching quotation marks. If either, or both, quotation marks are missing, a syntax
error message is displayed.
print(Hello World)
print("Hello World)
print(‘Hello World’)
print("Hello World’)
Quotation marks can be single (’) or double (") – it does not matter as long as they match.
Python is not too fussy about what you type inside quotation marks. Outside quotation
marks, Python is very limited in what it understands. One thing Python understands outside
quotation marks is number. Numbers do not have to be enclosed inside quotations.
KEY POINT: The technical word for text is string. A string is any text enclosed
inside quotation marks.
Notice from the fine three lines in the above example how print allows strings and
numbers to be separated by commas.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 7
Escape Sequences
Let’s say we wanted to display the following text exactly – including the quotation marks.
In the words of Nelson Mandela, “Education is the most powerful weapon which we can use
to change the world”
The line below does not work because in the ‘eyes’ of Python the second quotation closes
the first and the remainder of the line is not understood.
To fix the syntax error we escape the second quotation using the backslash character, \, as
follows:
In the above example the use of \" tells Python include the double quotes as part of the
string (as opposed to treating it as the closing quote).
The backslash character introduces an escape sequence in a string. Some common escape
sequence characters are illustrated in the table below:
\n Newline
\t Tab
\’ Single Quote
\” Double Quote
\\ Backslash
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 8
Experiment!
Try the following and see if you can explain what is going on.
What was the main thing you learned in this section about escape
sequences?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 9
Flow of Control
The flow of control refers to the order in which the lines of a computer program are run by
the computer. Normally lines are executed in the same sequence in which they appear. This
type of flow is called sequential. We use the following four-line program to illustrate this
concept.
When this program is run, execution starts at line 1 which causes the string, As I was going
out one day, to be displayed on the output console. Execution then moves sequentially
through lines 2, 3 and 4 and finally, the program ends as there are no more lines to execute.
The table below illustrates the program output be after each line is executed.
In reality, we only see the final output after line 4 is executed – this is because the program
is executed so fast by the computer. Nonetheless, it is important for students to understand
that for the computer to get to the final stage it had to pass through the other stages on the
way.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 10
Indentation
Indentation refers to the empty space(s) at the beginning of a line of code.
Notice that the second line contains a leading space. This is an indentation error.
The following syntax error is displayed when a program contains an indentation error.
In the above example indentation is not needed but – as we will see later – it is sometimes
necessary to indent code.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 11
Programming Exercises
2. Re-arrange the lines of code below into a program that displays the pattern shown on the
right. Note that you can use any line as often as you like, but you won’t need to use
every line.
3. Reflect on what you have learned about Python so far. Use the space below to write
three things that Python likes and three things that Python does not like.
Python likes …
1.
2.
3.
1.
2.
3.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 12
BREAKOUT ACTIVITIES
The focus on these activities is on getting used to the Python programming environment and
in particular sequential flow of control.
Suggested Activities
1. Key in the above program or download it from GitHub and
- make some changes to the program (e.g. add/remove/edit a menu option)
- discuss traditional console menus vs. GUI/touch screen interfaces
- discuss possible logic behind the options
2. Design and implement a menu for some other application of your choice e.g. what are
the options on your favourite app? What additional options would you like?
(For this exercise it is useful to think of a system from an end-user’s perspective.)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 13
BREAKOUT 1.2: Turtle Graphics
Turtle graphics is a popular way for introducing programming to novice programmers. It was
part of the original Logo programming language developed by Wally Feurzig and Cynthia
Solomon in consultation with Seymour Paper in 1966.
The movements of the turtle graphic object can be compared to the movements that you
would see if you were looking down at a real turtle inside a rectangular shaped box. The
program below causes the shape/pattern shown to the right to be drawn out on the screen.
Program Explanation
Line 1 tells Python to import a library called ‘turtle’. A library can be thought of as an
external Python program that contains useful code. from and import are two Python
keywords. When a library is imported into a program the functionality of that library can
then be used in that program.
The commands on lines 3 to 9 inclusive instruct Python to move the turtle forward and
turn it left/right until the shape is drawn.
Students should be reminded to close the turtle window once they have finished running
your program. The window can be closed by clicking on in the top right corner.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 14
Suggested Activities
1. Read lines 3-9 of the program and see if you can figure out how the shape is created
2. Type the program in and run it. (Warning! Do not save the program as turtle.py)
4. Rearrange lines 3 - 9 into different orders and see if you can explain
the change in output. You can delete some lines if you wish.
6. Modify the program so that it displays the shape shown to the right
Some of the more common movement commands supported by the turtle library are
outlined below.
Command Explanation
This command moves the turtle forward by n units from whatever
forward(n)
position the turtle is facing at the time the command is issued
When this command is issued it moves the turtle in the opposite
backward(n) direction to whatever direction the turtle is facing. The turtle is moved
by n units from its current position.
This command turns the turtle in a rightwards direction. The amount
right(angle)
of turn is specified by the programmer using angle.
This command turns the turtle in a leftwards direction. The amount of
left(angle)
turn is specified by the programmer using angle.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 15
Further Activities
The default starting position for the turtle is the centre of the screen with an arrow pointing to
the right (i.e. east). It is up to the programmer to keep a track of the position of the turtle on
the screen and the direction it is facing.
The best way to learn how to use turtles is to experiment. The following exercise might help.
1. Match each code block (numbered below) to the corresponding shape (denoted by
letters).
1. A.
2. B.
3. C.
4. D.
Note: Before running any of the above blocks of code you will need to add the line
from turtle import * before the turtle commands.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 16
2. Now demonstrate that your answers are correct!
Do this by keying in and running each of the separate code blocks.
3. The commands listed below can be used to change the appearance of turtle objects
Command Explanation
This command sets the appearance of the turtle object to be whatever
shape is specified by s. Valid values are arrow, turtle, circle,
shape(s)
square, triangle and classic. (Use quotation marks.) The arrow
shape is the default.
When this command is used it makes the turtle object disappear from
hideturtle()
the output screen.
This command sets the colour of the lines drawn by the turtle to be the
color(c) colour specified by 𝑐. Try different values e.g. red, blue, green.
(Don’t forget to use quotation marks either side of the named colour.)
This command sets the line thickness of the line drawn by turtle
pensize(n) movements. The value of n can be any number from 1 to 10 where 1 is
the thinnest and 10 is the thickest. Try it!
Can you come up with more than one solution for each shape? Compare and discuss your
solutions with your classmates.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 17
BREAKOUT 1.2: Games Programming with pygame
pygame1 is a free and open source Python library useful for games programming. As it does
not come with the standard Python installation, pygame needs to be installed separately.
When the program shown below is run it causes the output window illustrated to the right to
be displayed. The output window contains 5 different shapes – a blue horizontal line, a green
diagonal line, a white rectangle, a red circle and red ellipse. These shapes are drawn in
response to the commands on lines 15 to 19.
Read the code carefully – focus your attention on lines 15 to 19 (highlighted in bold) - and
see if you can guess which line of code is responsible for drawing which shape.
1
https://www.pygame.org
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 18
Suggested Activities
1. Key in (or copy+paste from GitHub) the full program and make sure it runs properly.
2. Devise your own theories about the code. For example, you might suspect that line 15
draws the blue horizontal line. In order to test this theory, you could comment out lines
16, 17, 18 and 19 and then run your program to see if you are correct.
This process should be repeated until you have confirmed your understanding of which
line of code is responsible for which shape.
3. Experiment by rearranging lines 15-19 into different orders. Each time you jumble them
around, run your program to see if they make any difference to the output displayed.
4. Change the code so that the shapes are displayed in different colours
5. Modify the numbers used in the commands used to draw the lines and the rectangle
(lines 15, 16 and 17). Can you figure out what the numbers mean?
Co-ordinate System
The diagram below explains the window co-ordinate system used by pygame.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 19
Game Loop
You may have noticed that the output window
does not close. To fix this problem you will
need to make two changes
a) Modify line 1 as shown
b) Add the (game loop) code shown here to
the end of the program listing.
Program Explanation
Line 1 imports the pygame and sys libraries into the program. pygame contains
functionality that our program can use to draw shapes.
Line 4 tells Python to initialise (i.e. start) the pygame engine
Line 5 tells Python to create an output window of width 400 units and height 500 units
Lines 9 to 12 define the primary colours BLACK, RED, GREEN, BLUE and WHITE.
These names are now known to Python and can be used further down in the program.
Lines 15 instructs Python to draw a horizontal blue line. The co-ordinates of the start and
end positions are provided along with codes for the colour and line thickness.
Lines 16 instructs Python to draw a diagonal green line. The co-ordinates of the start and
end positions are provided along with codes for the colour and line thickness.
Lines 17 instructs Python to draw a white rectangle. The co-ordinates of the upper left
corner are provided along with values for the width and height.
Lines 21 tells Python update the display window with the new shapes.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 20
Further pygame activities
1. The commands on lines 17, 18 and 19 draw a rectangle, circle and ellipse respectively.
Modify the numbers used inside the brackets. Can you figure out what the numbers
mean?
How might the program differ if the background was painted BLACK instead of white?
4. Write a program to display a circle centred on the output window. (You choose the size!)
Generalise your solution so that it works for any window size.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 21
Modify the program below so that it displays the first three rows of a proper chequer board
pattern.
# Draw Row 1
pygame.draw.rect(window, BLACK, (0, 0, 50, 50))
pygame.draw.rect(window, BLACK, (100, 0, 50, 50))
pygame.draw.rect(window, BLACK, (200, 0, 50, 50))
pygame.draw.rect(window, BLACK, (300, 0, 50, 50))
# Draw Row 1
pygame.draw.rect(window, BLACK, (0, 50, 50, 50))
pygame.draw.rect(window, BLACK, (150, 50, 50, 50))
pygame.draw.rect(window, BLACK, (200, 50, 50, 50))
pygame.draw.rect(window, BLACK, (350, 50, 50, 50))
# Draw Row 1
pygame.draw.rect(window, BLACK, (50, 100, 50, 50))
pygame.draw.rect(window, BLACK, (100, 100, 50, 50))
pygame.draw.rect(window, BLACK, (300, 100, 50, 50))
pygame.draw.rect(window, BLACK, (350, 100, 50, 50))
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 22
Section 2
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 23
Introduction
So let’s say we wanted to write a program to display the name of a person and their favourite
colour in a greeting string and then display a personalised goodbye message. We could
write:
One problem with the above program is that the string Alex appears twice and this gives rise
to the possibility of a mismatch in spelling. It would be better if had some way of telling our
program to remember the person’s name. This can be done by using a variable.
The variable personName is used to store a person’s name and the variable
favouriteColour is used to store the person’s favourite colour.
The variables are declared on lines 1 and 2 respectively. Each line assigns the initial values
Alex and red to the respective variables.
Line 3 displays the contents of the variables in a greeting string. Notice that the names of the
variables appear outside the double quotations, and also the use of commas to delimit the
variables from the greeting string.
When Python comes across the variable names in the print command it substitutes the
values of the variables into the string to be displayed.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 24
The name of the person or the colour can now be changed, simply by changing the value of
the variable. For example, we could write:
The program is considered better because the person’s name is stored in a variable and
needs to be keyed in by the programmer only once. However, the program still has a
problem in that it lacks generality i.e. it only works for one person and one colour. Every time
we want to display a different message we need to change the program.
A more general (and realistic) solution would be to ask the user to enter their name and
favourite colour. This can be achieved using the input command as follows:
The string in brackets following the word input is displayed as a prompt to the end-user.
Every time the above program is run, whatever values are entered by the end-user are
stored in the variables personName and favouriteColour. These values are then
displayed in the output messages.
Without having to make any changes to the program, the output messages can vary on
every run. This is an example of a general solution to a problem.
The input (and print) commands are both examples of Python built in functions. The
complete list of Python built in functions can be found in the appendix.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 25
Variable Syntax
The general syntax for declaring a variable is made up of a left hand side and a right hand
side as follows:
<variable-name> = <expression>
The name of the variable appears on the left hand side and an expression appears on the
right hand side. The ‘=’ symbol in the middle is the Python assignment operator.
KEY POINT: Although the symbols used to denote the Python assignment operator
and a mathematical equation are identical, they should not be confused as they
mean two completely different things.
The use of ‘=’ in Python indicates an assignment statement. When Python comes across
an assignment statement it evaluates the expression on the right hand side first. The result
of this evaluation is then stored in the variable named on the left hand side.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 26
This is an exercise about vocabulary.
The graphic below shows six Python assignment statements and six
(incomplete) English sentences.
Complete the sentences on the right so that each one describes its
corresponding assignment statement on the left.
Once a variable has been declared the name is added to Python’s vocabulary for the
remainder of the program.
It is up to the programmer to decide what name to give their variables. The rules and
guidelines for naming variables are described on the next page.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 27
Guidelines and Rules for Naming Variables
As a general guideline variable names should be simple and meaningful. A meaningful name
is one that tells something about what the variable is used for. The use of meaningful
variable names makes programs more readable and understandable to fellow programmers.
When choosing a name for a variable it can be helpful to think of a noun that describes the
purpose of the variable.
It is considered good practice to capitalise interior words in multi-word variable names. This
usage is referred to as camel case and firstName, addressLine1, stockCount,
highScore, and payRate are all examples of good variable names.
If Python comes across a name it does not understand it will display a syntax error.
a) student.Number
b) x
c) 1x
d) x1
e) input
f) number
g) 20
h) h20
i) PPSN
j) ppsn
k) person name
l) address
m) date_of_birth
n) 2+4
o) print
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 28
Datatypes and Operations
Programmers need to be aware of the type of data that their programs process. This is
referred to as datatype.
Thus far, we have encountered examples of both string and numeric datatypes. If, for
example, we wanted a program to store someone’s name or favourite colour the variable’s
datatype would be string. On the other hand, a numeric datatype is the proper datatype for a
variable to store a person’s age or height.
Python supports several different types of numbers - integers, floating point numbers as well
as a range or more exotic types of numbers (e.g. complex numbers, fixed precision decimals
and rational numbers)
Every datatype in Python has a permissible set of operations that are only valid for that type.
(For this reason, Python is said to be a strongly typed language.) The numeric datatype
supports all the usual arithmetic operations such as addition, multiplication etc. These are
illustrated in the table below (assume x=7 and y=3)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 29
Reflection
Reflect on what you have learned about variables, datatypes and expressions so far.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 30
Program Tracing
Computers can execute programs at a rate of millions of lines per second. The values of
variables can change so fast that programmers can easily lose track and sometimes find it
difficult to be sure that their program logic is correct. In order to combat this, programmers
often execute a program manually i.e. using pen and paper to keep track of variables line-
by-line. This activity, called program tracing is used by programmers to verify for themselves
that their program will do what it is intended to when it is run by the computer.
The Python code is shown on the left below and the variables are illustrated as boxes on the
right. The boxes are used to represent memory locations i.e. they are part of a notional
machine used by programmers to keep track of the state of their variables at runtime.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 31
Exercise: Program Tracing
Manually trace the programs shown below. (Use the space provided on
the next page.) Can you figure out what each program does?
PROGRAM 1
PROGRAM 2 PROGRAM 3
PROGRAM 4
PROGRAM 5
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 32
Tracing notes
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 33
Input-Process-Output
Many computer programs follow the input-process-output model as illustrated.
This means that a program accepts data as input, carries out some processing (usually a
calculation) and then displays and/or stores the output.
We already know the input command is used to prompt an end-user to enter a value into a
running program. The value entered can then be stored in a variable.
KEY POINT: programmers need to be acutely aware of the type of data with which
their program is working.
By default, the input command returns a string. This means that if you want your program
to accept numeric data from the end-user, the value entered must be converted from a string
to either an integer or a floating point (i.e. a decimal) number.
Fortunately, Python has two built-in commands that can perform these conversions. These
are called int and float respectively.
int(s) Converts the string ‘s’ to an integer. The result is a new number
object
The two commands int and float are important because they allow Python to use values
entered by the end-user in arithmetic expressions.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 34
Example – Year of Birth
We want to write a program to calculate a person’s year of birth.
Our program will ask the end-user for two pieces of information - the current year and the
age they will be at the end of the current year.
Since year and age are both numeric we will need to instruct the program to convert them
from strings to integers. This can be done with the int command.
Lines 1 and 2 both display a prompt asking the user to enter values and then convert these
values from strings to integers. The conversion from string to integer is needed here
because Python knows how to subtract numbers but cannot subtract strings.
Line 3 subtracts the two integers (to calculate the year of birth) and displays the result in an
output message.
Notice how both int and input are called on the same line. When commands are
combined together on the same line like this it is called function composition. Python
executes the innermost function first and then works back towards the leftmost function
which is executed last.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 35
It is important to understand the subtle difference between the string “2018” and the numeric
value 2018. One difference is subtraction is supported for numbers but not for strings
KEY POINT: The operations that can be carried out on values are constrained by
the value’s underlying object type. For example, subtraction is not supported for
strings.
Since the values are not converted to integers Python stores them as strings. The
expression year-age on line 3 is an attempt to subtract two strings which is not allowed in
Python. Python does not support the subtraction operation on strings.
It is also worth noting that numbers can be converted to string objects using the str
function. As an experiment try running the following lines of code separately:
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 36
Example – Temperature Conversion
Let’s look at another example of a program that accepts an input, performs some processing
and displays an output. The program below converts Centigrade to Fahrenheit. The formula
used is,
9
𝑓= × 𝑐 + 32
5
The input is the Centigrade value entered by the end-user; the processing is the conversion
(done by applying the formula); and the output is the Fahrenheit value displayed.
The use of the float command on line 2 above means that the user can enter decimal
values for Centigrade. (Integer values are also permitted.)
Notice how both float and input are combined together on the same line.
Use the space provided to write down what you think would
happen if the float command was removed from the above
function. Why do you think int was not used?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 37
A note on Testing
The purpose of testing is to verify that the program does what it is meant to.
It is normal practice for programmers to devise a number of test cases as part of the
program design process. Each test case is made up of an input and an expected output.
When the test case is run the actual output should be recorded. If there is a difference
between the expected and actual output, then the program contains an error (or bug) which
will need to be fixed.
The table below provides a good basis for testing the Centigrade to Fahrenheit program
shown on the previous page. Each row in the table is a separate test case.
Sample Expected Actual Note that the values in the sample input
Input (℃) Output (℉) Output column are arbitrarily chosen. The expected
0 32.0
output values are calculated by using a
32 89.6
1000 1832.0 calculator or come from some other source
-10 14.0 e.g. world wide web. The values in the
-40 -40.0 actual output column should be recorded by
-1000 -1768.0
running the program.
When the program passes all test cases it is said to be unit tested.
A good unit test will ensure that every line of code is triggered. It will also take ‘abnormal’
scenarios into consideration
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 38
Reflection
Examine the program below in terms of input(s), processing and output(s).
1. What are the inputs? What processing is done? What is the output?
2. What would happen if all or any of lines 3, 7 and 11 were removed from the program?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 39
More built-in functions
Let’s take another look at our temperature conversion program discussed earlier.
This time try an input value of 21℃. The program displays the output shown below – the
number of digits displayed after the decimal point is unnecessary and unwieldly.
21.0 degrees C equals 69.80000000000001 degrees F
The level of precision displayed can be controlled by the programmer by using the round
function. Line 4 tells Python to display the value of fahrenheit rounded to 1 decimal place.
A full description of the round function is given in the table below along with some other
useful build-in functions offered by Python.
Can you predict what output would be displayed by this line of code?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 40
The Remainder Operator (%)
The remainder operator, % (aka modulus operator), like all of the other Python arithmetic
operators, is a binary operator i.e. it works on two numbers, referred to as operands.
The comments (in red) in the short Python program below describe how examples of the
remainder operator works.
It should be evident that the remainder operator works by dividing the second operand into
the first. Whatever is left over is the result of applying the remainder operator.
The word mod (short for modulus) is often used to phrase questions or answers involving the
remainder operator. For example, what is 30 mod 10, or 9 mod 5 is equal to 1. Furthermore,
Computer Science contains a rich set of problems whose solutions involve using the
remainder operator. The application of the remainder operator to solve problems is referred
to as modular arithmetic and because modular arithmetic is particularly useful for
calculations involving time, it is also referred to as clock arithmetic.
For example, let’s say wanted to find out what day of the week it will be in 1000 days’ time.
We know every week has 7 days, and can calculate 1000 mod 7 to be 6. Therefore, the day
of the week in 1000 days will be the same day as it will be 6 days from now.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 41
The same general principal can be applied to working solutions to problems involving other
units of time such as seconds, minutes, hours, months, years, leap years, Easter etc.
Let’s take another example. You are about to embark on a space journey lasting 850,000
hours! Take off time is exactly 21:00h. What time will it be when you reach your destination?
Modular arithmetic is also useful in situations where it is required to group ‘things’ (e.g.
people) into a fixed number of arbitrary sized groups. For example, if we had a group of 20
students in a class and we wanted to create four arbitrary sized groups, we could ask each
student to pick a random number – let’s call it N. Then N mod 4 will guarantee a group
number for that student because it will always be 0, 1, 2 or 3.
Another useful application is simply to find the properties of numbers. For example, mod 2 is
frequently used in computer programs to test whether a number is even or not (evenness
test).
Perhaps, some of the most common applications of modular arithmetic can be found in the
area of coding systems, ciphers and cryptography. Ubiquitous examples exist in the use of
modular arithmetic to perform validity checks on barcodes, ISBN numbers and credit card
numbers (e.g. Luhn’s algorithm) to name just a few. For example, a 13-digit barcode is valid
only if the following expression is evenly divisible by 10.
where, 𝑑1 is the leftmost and 𝑑13 the rightmost barcode digit. If the expression mod 10 is
not equal to zero, the barcode is invalid and the scanned item will be rejected.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 42
Programming Exercises
1. Write a program to calculate and display the total from the bill below.
5 x mars bars @ €1 each
4 x cans of coke @ €1.50 each
3 x bags of crisps @ 80 cents each
2 x cups of tea @ €2 euro each
1 x slice pan @ €3.50 each
2. Re-arrange the jumbled up lines shown below so that the program displays the sum of
two integers entered by the end-user.
Warning! There are three extra lines that you won’t need.
3. Given the following formula to convert Fahrenheit (𝑓) to Centigrade (𝑐) write a program to
prompt a user to read in ℉ and display its ℃ equivalent correct to 2 decimal places.
5
𝑐 = (𝑓 − 32) ×
9
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 43
4. Write a program to find the day of the week for any date using Zeller’s Algorithm.
13(𝑚𝑚 + 1) 𝑦 𝑐
𝑤 = (𝑑𝑑 + ⌊ ⌋ + 𝑦 + ⌊ ⌋ + ⌊ ⌋ − 2𝑐) 𝑚𝑜𝑑 7
5 4 4
where,
w is the calculated weekday. (𝑆𝑎𝑡 = 0, 𝑆𝑢𝑛 = 1, 𝑀𝑜𝑛 = 2, … 𝐹𝑟𝑖 = 6)
y is the last 2 digits of the year - remember the year is minus 1 for January or February
and the actual year for any other month. (e.g. for 25/12/1989 y is 89)
Hint: You need to decide what inputs you need from the end-user and what inputs to the
formulae you can derive from these user inputs.
Expected Actual
Date
Output Output
25/12/1989 2
01/01/2000 0
22/11/1963 6
Your Birthday! ?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 44
Running Totals
Running totals are needed so often in programs that it is well worth putting some effort into
understanding the pattern used to create them.
A running total is a value that usually starts at zero and increases by successive additions
until a final total is reached. A very common example is a shopping basket total calculated at
a checkout.
Let’s say we have three items in our basket and they are valued at €10, €14 and €6
respectively. With very little effort, most people understand that the total bill is €30. However,
what most people probably don’t realise is that they have (subconsciously) run a running
total program similar to that shown below in their own heads.
Novice programmers may find the following tips for dealing with running totals useful:
1. Recognise the need for a running total (this is probably the most difficult step)
2. Initialise your running total variable to zero (line 4 above)
3. Every time you need to add a value to the running total use an assignment (lines 8, 10
and 12 above). Notice the only difference between these lines is the name of the variable
being added to runningTotal.
KEY POINT: The hallmark of the running total pattern is the runningTotal
variable appears on both sides of the assignment statement. In this way it is used to
update itself.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 45
Can you re-order the lines in the previous listing without
breaking the code?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 46
Introducing Random Numbers
Random numbers provide a rich way of generating numeric data in early stage
programming. A more advanced application of random number generation is in games
programming.
The first multiplies two randomly generated numbers and displays the result; the second
computes the mean of five randomly generated numbers.
Study both programs carefully – paying particular attention to the comments in red - and
then answer the questions on the next page in relation to the second program listing.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 47
Explain the purpose of the variables low and high.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 48
Additional Notes
Internally, Python maintains a system table with one entry per variable. The values are
represented in memory as objects and a reference links the variable to the object.
The diagrams below illustrate what happens when we initialise the variable x to 5 and then
assign a new value to it.
Conceptually, the value of a variable changes. The old value seems to be replaced with a
new value. Technically, what happens is illustrated as follows:
The old value remains on in memory, and the variable that referenced it before the
assignment now references the new value.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 49
It is for this reason that objects such as strings and numbers are said to be immutable.
Finally, note that the original number object i.e. 5 in this case is left without a reference.
Unreferenced values are referred to as dangling objects. Such objects are automatically
returned by Python, to memory, in a process known as garbage collection.)
These are given here for the sake of completeness. (Assume x=7 and y=3)
Unlike C++, Java and some other programming languages, Python does not provide built-in
support for the unary increment and decrement operators (e.g. − − x and y + +).
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 50
BREAKOUT ACTIVITIES
1. Predict what pattern would be generated by the each of the following program listings.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 51
2. Match each code block (numbered below) with the correct shape (denoted by letters and
drawn to scale).
1. A.
2. B.
3. C.
4. D.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 52
3. Modify the program below so that the angle size is increased by 135° before each turn.
The modified program should display the pattern illustrated to the right
5. Write a Python program to display five lines of random length. Each line should be joined
to the next at a randomly sized angle.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 53
BREAKOUT 2.2: Automated Teller Machine (ATM) Menu System
Recall from Section 1 the menu system for our fictional LCCS bank.
Use the knowledge you have gained so far to convert the pseudo-code shown to the right of
the menu below into Python.
Hint: You will need to consider what variables you will need as well as their datatype.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 54
BREAKOUT 2.3: Data Processing (average height)
The short program shown below was designed to calculate the mean height from five values
entered by an end-user. Study the program carefully until you are satisfied you understand
how it works.
The test data shown below threw up some differences between expected and actual outputs.
Although the program is syntactically correct it contains at least one semantic error (bug).
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 55
Suggested Activities
1. Key in (or copy+paste from GitHub) the full program and make sure it runs without any
syntax errors.
2. Experiment by rearranging lines 6-10 into different orders. Each time you make a
change, run your program to see if they make any difference to the output display.
4. Modify the code so that it can accept decimal values for height as well as whole
numbers. (Make sure to round your result.)
5. Implement some of your suggestions from the bottom of the previous page
6. Rearrange the lines below into a program that does the same thing.
Note, only five of the lines (excluding comments) are needed but two of these will be
needed more than once.
7. Add a line of code to display the result in feet and inches as well as centimetres.
(1𝑐𝑚 = 0.393701 𝑖𝑛𝑐ℎ𝑒𝑠)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 56
Further Activities
By this stage you are more than likely getting tired of having to enter 5 different values for
height every time you run your program.
Before reading the detailed explanation of the program on the next page see if you can
complete the comments on lines 11, 12, 14, 15, 17, 18, 20 and 21.
The file heights.csv was created in a spreadsheet and saved into the same folder as the
Python source program. This is called the runtime folder.
Each of the five lines in the data file contain a numeric value that represents a person’s
height in centimetres.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 57
Program Explanation
Line 4 of the program opens a data file called heights.csv in read mode. This tells
Python that the file will be used for reading (as opposed to writing) purposes. The
variable heightFile is the program’s reference to this file. This is called the file pointer
(also referred to as a file handle). Any operations on the file such as reading the file must
use this file handle.
It is useful to think of a file pointer as an imaginary index finger. When a data file is
initially opened in read mode the pointer is positioned at the start of that file.
Line 6 initialises a variable called totalHeight to zero. This variable will be used to
store the sum of all the height values.
Line 8 tells Python to read a line from the data file, convert the result to a floating point
number and store the resulting value in a variable called height. (There’s lots going on
here so make sure you understand this line as it is a very common type of pattern in
Python programming.)
Every time the program reads a line from the file, the file pointer is moved to the start of
the next line in the data file. This is a subtle side effect of the readline command.
Line 9 adds the current value of height to the value stored in the variable
totalHeight (which was initialised to zero on line 6). In this case, the answer will be
the same as the value in height. This answer is then stored in totalHeight.
This pattern of reading the next line from the data file and adding the height value to the
running total is repeated four times i.e. once for each line in the data file.
Line 24 computes the average and lines 27 and 28 display the result.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 58
BREAKOUT 2.4: Games Programming with pygame (Animation)
In this activity we will use our knowledge of variables to create the illusion of a 50x50 unit
square block moving from a starting position on the top left hand corner of a window towards
(and beyond) the bottom right hand corner of the same window.
Before writing any code it is good practice to first design a solution. Start by analysing the
problem – make sure you understand what is required. It is always helpful to try to visualise
what the final running program will look like.
The three screenshots below depict a red block moving diagonally (downwards and to the
right) towards the bottom right corner.
Before writing any code it is often helpful to ask probing questions such as ….
Have I done something similar before? Can the task be decomposed (broken down)?
What Python commands are there to meet my need? How do these command work?
Do I need variables?
Can I find a solution for a similar problem using the internet? What would I be looking for?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 59
In this case we will decompose the problem into 2 parts:
a) Display a 50x50 block in the top left hand corner of a pygame window
b) Create the required illusion of movement from top left towards bottom right
The solution to part a) along with the output window is presented in the program listing
below. (You should key in/download the program and make sure it runs without any syntax
errors.)
Program Explanation
It should be possible to understand most of the code from the activity at the end of
section 1 (if not you should revisit section 1)
Line 16 is the key line – this line uses the command pygame.draw.rect to draw the
50x50 rectangle (i.e. a square) at position (0,0) in the display window. The ‘clever’ bit is
recognising that by using (0, 0) as the co-ordinates the block will be positioned at the top
left of the display window as required.
Line 18 updates the display causing the red square to actually appear in the display
window.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 60
The solution to part b) of the problem - presented below - is slightly more intricate and
requires a little more in depth knowledge of the ‘game loop’.
The ‘trick’ here is to create the illusion movement by displaying the block in a sequence of
different positions. In order to do this the co-ordinates of the block will be needed.
We introduce two variables x and y to store the co-ordinates of the top left corner of the
block. The variables are initialised to 0 on lines 14 and 15 respectively.
Our illusion is achieved by changing the value of each variable inside the game loop (lines
28 and 29) before redrawing the block and updating the display.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 61
Experiment! Try making the following changes.
1. Comment out line 33. What happens? What is the purpose of this line of code?
2. Change the fill colour on line 33 from BLACK to RED. Explain what happens.
3. Comment out line 28. What happens? Can you explain why?
4. Change the offset amount from 5 to 10 on line 29. Explain any changes in the way the
program behaves.
Further Activities
1. Adapt your program so that the block moves as follows:
- from the top left corner to the bottom left corner
- from the top left corner to the top right corner
- from a different starting position in one dimension e.g. top right to bottom right
- from a different starting position in two dimensions e.g. bottom left to top right
- from a random starting position to a random ending position
2. Write a program to make a ball (circle) appear to move through the screen.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 62
Section 3
Strings
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 63
Introduction
In Section 1 we defined a string as any text enclosed inside quotation marks. Strings are
important simply because, along with numbers, they are by far the most common type of
data processed by computer programs and systems.
The value of a string can either be a string literal or any Python expression that results in a
string. Some examples of simple string literals are listed below.
Notice from the above examples that characters can be letters, numbers, spaces,
punctuation marks and basically any symbol your keyboard will allow you to enter.
Internally, computers store unique numeric codes for each character and not the actual
characters themselves.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 64
When to use a string
It is relatively straightforward to understand what a string is. However, a more necessary skill
lies in the ability to recognise the need to use strings (in computer programs).
The art of computer programming usually involves the representation of some real world
phenomena by using a programming language such as Python. In other words,
programmers use the features of Python to model real world phenomena.
The number of real world situations that can be modelled using computer systems is
endless. Examples include buying, selling, order delivery, flight scheduling, medical systems,
processing of examination results, news, entertainment and even socialising.
At an even finer level of detail, the string datatype is a feature of Python that is suitable for
representing many real world things.
KEY POINT: A string should be used in a computer program to model any real
world data that could be composed of any combination of letters, numbers and
punctuation symbols.
Examples of string data include names, addresses, phone numbers, passwords, email texts,
Facebook posts, SMS text messages, tweets, product codes, descriptions – the list is
endless. In fact, most of the data you see on your mobile phone and on the world wide web
are represented by strings.
Novice programmers should be made aware of the fact that data which intuitively looks
numeric are frequently represented in programs by strings. The reason for this is that these
apparent numbers can often contain non-numeric data such as brackets, dashes or letters.
Common examples include phone ‘numbers’, vehicle registration ‘numbers’ and Personal
Public Service Numbers (PPSN).
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 65
String Operations
We already know we can display a string using the print command. But what are the other
operations that can be carried out on strings?
By far the most important strings operations are indexing and slicing. Indexing is a
programming technique used to access individual characters of a string. Slicing is a variation
on this used to access multiple continuous characters from a string (known as a sub-string or
a slice).
Other operations that can be carried out on strings are addition, multiplication, formatting
and comparisons. Strings also support set operations such as in and not in. These set
operations along with comparisons will be discussed in the section on programming logic.
Python also comes with a number of built in commands that can be used on strings as well
as a comprehensive set of commands (known as string methods) specifically designed for
working with strings.
String Indexing
In order to understand string indexing (and slicing) it is first necessary to understand the
concept of an index. Consider the string s initialised in the line of code shown
The individual characters in every Python string have a position. This position is relative to
the first character in the string and is known as an index. Because the index is an offset from
the first character, the index of the first character itself, in every Python, string is zero.
Indices are said to be zero-based.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 66
The diagram below depicts the index position of every character in the string s.
As can be seen the first character i.e. ‘H’ has an index of zero. This is important. The first
character in a string always occurs at index position zero (this is often called the zeroth
position), the second character at index position 1, the third character at index position 2 and
so on. The string Hello World contains 11 characters and each character has a unique index
ranging from 0 to 10.
In general, when there are 𝑛 characters in a string the last character always occurs at index
position 𝑛 − 1. Therefore, if there are 5 characters in a string the last character occurs at
index position 4.
Each individual character of a string can be accessed by enclosing the character’s index
inside square brackets The square brackets must appear directly after the name of the
string. For example, the first element of the above string can be accessed using s[0]. So,
s[0] "H"
s[1] "e"
s[2] "l"
s[3] "l"
s[4] "o"
s[5] " "
s[6] "W"
s[7] "o"
s[8] "r"
s[9] "l"
s[10] "d"
It is worth pointing out that Python, unlike many other programming languages does not
support the concept of a character datatype. All of the single characters returned in the
above example are actually strings i.e. single character strings of length 1.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 67
Negative Indices
Python permits the use of negative numbers as indices.
Experiment!
A pangram is a sentence that uses every letter of the alphabet at least once.
Study the program below and see if you can predict what it does? Record your
prediction on the right hand side.
Key in (or copy+paste from GitHub) the program and make some changes?
What happens?
Prediction
What one question (if any) would I still like to ask in relation to this
example?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 68
Common Pitfalls
It is worth pointing out a couple of very common pitfalls relating to strings and index numbers
The first thing to note is that strings are immutable. This means that once a string has been
initialised it cannot be changed. For this reason, it is not permitted to use the index operator
([]) on the left hand side of an assignment statement.
For example, the string Cavan could not be changed to Navan as follows.
To ‘change’ the value of town to Navan the program needs to make a new assignment
town="Navan" but be warned that the reference to the original string Cavan is now lost.
Secondly, if a program attempted to access a character in a string using an index that is too
big (i.e. beyond the last character) for that string, Python returns a runtime error telling you
that the index is out of range. For example, running the following code snippet would result
in a runtime error being displayed because the index 5 is beyond the range of the string.
Out of range errors are also known as out of bounds errors. These type of errors can be a
source of great frustration even for more experienced programmers.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 69
String Slicing
Thus far we have used indexing to access individual characters from a string. The technique
of indexing can also be used to extract a sub-string from a string. This is known as slicing.
The part of the string that is extracted is known as the slice (i.e. sub-string).
Slicing is useful when we want to extract a specific piece of information out of a longer piece
of information. For example, we may want to extract a share price from a web page
displaying stocks.
In order to extract a slice from a string we need to know the indices of the desired slice’s
start and end positions. The slice is taken by specifying these values inside the square
brackets. The values are separated by a full colon.
The colon delimits the start and end positions of the slice we are interested in extracting. The
resulting slice runs from the starting index up to, but not including the end. If the start is
missing it is taken to be zero i.e. the first character of the string. If end is missing it is taken
as the index of the last character in the string.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 70
String Addition and Multiplication
Strings, just like numbers can be added and multiplied.
The programs below illustrate how the plus operator is used to concatenate strings.
PROGRAM 1
PROGRAM 2
PROGRAM 3
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 71
Building up a string (string construction)
String concatenation is a useful technique for building up a string made up of separate
strings that come from different sources. Let’s say we wanted to construct an output string
based on the pangram string we used earlier.
This time however we want to ask the user to enter the colour of the fox and the name of the
animal to jump over. The output string will be constructed based on the values entered by
the user. Example outputs could be:
String multiplication
Multiplication of strings in Python is not very common. When a string is multiplied by some
integer 𝑛, a new string is produced. This new string is the original string repeated 𝑛 times.
The technique of string multiplication is exemplified by the program shown below. The output
generated by the code is displayed to the right.
HelloHelloHello
eee
elelel
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 72
Programming Exercise 3.1
The string variable alNum is initialised as shown here.
1. Match each index operation on alNum (numbered 1-9 below) to the correct value on
the right hand side (denoted by letters A-I)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 73
Strings Formatting
Sometimes it is useful to be able to display a string that is made up of several pieces of data
without having to use the string construction techniques just described.
Formatting string expressions enable us to display more than one piece of data in a single
print statement. Consider the following statement:
The first string after the opening brackets on each line is called the format string. This is the
string that Python displays once it has it formatted. In this example the format string is Hello
%s
The %s is a placeholder for Python to insert a string value into the format string. %s is an
example of a Python formatting type code (aka format specifier).
The % immediately after the format string tells Python that what follows is a string formatting
expression. This expression contains the actual value(s) for Python to substitute into the
format string.
In the above statement, Python replaces %s the string literal, World, and the resulting
formatted string Hello World is displayed.
KEY POINT: The print command replaces each format code, in strict
sequence, with a value of the appropriate datatype from the formatting
expression.
If the format string contains more than one code, then the corresponding values
in the expression must be separated by commas and enclosed by brackets.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 74
The four statements below each generate the same output.
What output is displayed?
Experiment!
See if you can figure out what the following code does.
Finally, it is worth noting that string formatting expressions can, and frequently do, contain
variables and/or other Python expressions. This is exemplified in these two snippets.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 75
Built in string commands
So, let’s say we have a string s declared and initialised as follows:
The table below outlines the use of three different built-in string commands – len, min and
max - and the output they produce when applied to s.
Command Description Output
Returns the length of the string, s
len(s) 44
This is the number of characters in the string.
Another built in command that relates to strings is str. The str command is used to
convert any object into string. This means a program can dynamically change the type of
any object to a string type.
One practical use of str is to convert numbers to strings when we want to display them as
part of an output message. Observe how runningTotal is converted to a string in the last
line of the following program.
KEY POINT: Python is dynamically typed. This means that when a program is
running, numeric data can be converted to strings and vice versa.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 76
Coding Systems (ord and chr)
Two other built in Python commands that relate to strings are ord and chr
Programmers should be aware that all data is represented internally by computers using a
coding system. A coding system is one which uses combinations of binary digits to represent
data values uniquely. ASCII (American Standard Code for Information Interchange) and
Unicode are the names of two very widely used coding systems. An illustration of the full
ASCII character set is shown below.
The two built-in functions – ord and chr - are used to convert back and forth between
characters and ASCII.
ord(c) Returns the ASCII representation (or Unicode code point) of the character c.
chr(i) This is the inverse of ord. The function returns a single character as a string
whose ASCII representation (or Unicode code point) is the integer i.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 77
The programs below illustrate the use of ord.
Line 1 outputs 65. This is the ASCII
representation for the character ‘A’
Experiment!
Try running the following two pieces of code and see if you can
explain what is going on.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 78
Programming Exercise 3.2
A Caesar cipher is a way of encoding strings by shifting each letter by a fixed number of
positions (called a key) in the alphabet. For example, if the key value is 1, the string ’LCCS’.
would be encoded as ‘MDDT’. Each letter of LCCS is moved on by one.
The short program below prompts a user to enter a single character and then it calculated
and displays the character with the next ordinal number e.g. if the user enters the letter A,
the program will display B.
Run the program and once you understand what it does, change it so that it "encodes" a 6
letter string using a key value of 1 e.g. "Python" becomes "Qzuipo".
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 79
String Methods
String methods are special commands that can be used to manipulate and perform
common/useful operations on string values.
Each of the nine lines of output correspond, in sequence, to the result of the string methods
used inside each of the nine print statements.
The program, along with the output it generates should be studied carefully again after
reading the method descriptions on the next page.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 80
As can be seen, the string methods operate using the same dot notation as we used for
turtle and pygame objects earlier. For any string variable s, we can use a string method
by typing s, followed by a dot, followed by the method’s name. This is denoted as follows:
<string-variable-name>.<method-name>
s.capitalize() Returns a new string with the first letter of s in capital letters
s.upper() Returns a new string with all the letters of s in upper case
Returns the value True if all the letters in s are in upper case. If
all the letters are not in upper case the method returns False.
s.isupper()
True and False are both Python keywords will be explained in
the next section on programming logic.
Returns the value True if all the letters in s are in lower case. If
all the letters are not in lower case the method returns False.
s.islower()
True and False are both Python keywords will be explained in
the next section on programming logic.
This method looks for a string e.g. Fox in the string s and if it
s.find("Fox") finds it returns the index position of the F. If the search sting is
not found the method returns -1.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 81
Programming Exercise 3.3
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 82
Additional Notes (Sequences)
Strings like almost everything else in Python are examples of objects. The string type is a
core data type that is built into the language. Some other examples of built in types include
numbers, lists, tuples, dictionaries and files. The official documentation on all Python’s types
can be viewed online at https://docs.python.org/3/library/stdtypes.html and is well worth a
visit.
More specifically Python classifies strings as part of a more fundamental kind of object
known as a sequence. A sequence is defined as an ordered collection of objects
Python supports three basic sequence types (list, tuple and range), a text sequence
type (str) and a number of binary sequence types use to work with binary data.
All sequence types share a common set of operations, called sequence operations. The
table below, which is taken directly from the official Python documentation, lists these
common sequence operations in ascending order of precedence.
Note that concatenation, multiplication, indexing, and slicing – all described in this section in
the context of strings – are all common sequence operations and, therefore, are equally
applicable to all the other sequence types.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 83
Sequences can either be mutable, meaning that their values can be changed once they
have been created, or immutable, meaning that their values cannot be changed after
creation.
Sequences are also distinguished from one another by their own specific set of operations
that are not available to other types. For example, the string methods described earlier in
this section are specific to string sequences and cannot be used on other sequence types.
Finally, it is worth noting that unlike many other high level programming languages, Python
does not provide any built-in support for the character datatype. In Python, a single character
is simply treated as a string of length one.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 84
BREAKOUT ACTIVITIES
Your school loves to hear feedback from teachers and students on a wide variety of topics
and issues – so much so, that the school website even has a dedicated page for hosting
weekly surveys. This week’s survey, shown below, relates to the menu in the school
canteen.
The format of the web page is the same for every survey. Surveys differ from each other
only in the actual question being asked, and the text of possible answers which always
appear in two buttons displayed side-by-side on the page. Participants are always asked to
enter their first name and last name.
The questions and answer options for the next three surveys approved by the school board
are shown below.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 85
The problem is that every week the school ‘techie’, Ms E. Fish, has to edit the HTML file with
next week’s survey question and answers, and upload it to the web server to make it live on
the school web site.
The ‘techie’, who is also the school’s Computer Science teacher understands HTML, but
with the new term fast approaching is very busy developing content for the learning
outcomes in the new LCCS specification as well as coming up with ideas for teaching the
course through the lens of the four Applied Learning Tasks.
Even though the HTML code behind the survey page – shown below - is fairly
straightforward, she needs come up with an efficient solution so that her colleague, Mr.
Chips (the maths teacher who does not possess any knowledge of HTML), can upload the
new survey.
survey.html
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 86
3. She will write a Python program that generates a HTML for the next survey using two
files survey_template.html and survey.txt. The name of the generated file will
be survey.html.
All Mr. Chips will have to do every week is edit the text file and run the program. No need
to worry about HTML - easy!
Ms. E. Fish was delighted that her proof of concept worked and so commenced the job of
implementing her solution. She created the two files - survey_template.html and
survey.txt – as per design. These are shown below. Notice the three placeholders for the
text on lines 6, 14 and 15 in the survey_template.html
survey_template.html
survey.txt
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 87
However, soon after she started writing the Python program to generate the weekly survey,
Ms. E. Fish realised that she needed to prioritise lesson planning for the fast approaching
LCCS.
With the program, shown below, at unit test stage, unless someone steps in, the project is
looking like it might have to be shelved and the destination for next year’s school tour is still
undecided.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 88
Suggested Activities
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 89
BREAKOUT 3.2: RSS Feed Analysis
Really Simple Syndication (RSS, aka Rich Site Summary) is a technology that allows an
end-user to have information delivered automatically from selected website(s) to a device.
The information is referred to as a feed. Users can subscribe to receive RSS feeds from
specific sites, and in this way, keep up-to-date with the information they are interested in.
Typically, these sites contain information relating to business, jobs, blogs, news,
entertainment etc. Once a user has subscribed, feeds containing any new information on
these sites are automatically ‘sent’ to that user who can then view them using a RSS reader
(typically a web browser).
1.
2.
3.
4.
5.
In this session we will modify and write code that analyses data from a live RSS feed of your
choice.
A working program that connects to a URL and delivers a live RSS from that URL to a
variable called feed is provided as a starting point. The program listing is shown on the next
page.
Notice that a large section of the code in enclosed in a black box. The black box is used to
indicate code that is needed for the program to run, but not necessary to understand. In this
example, the code inside the black box tells Python to read a RSS feed from the URL
specified as a string on line number 24.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 90
Program to read a RSS feed
The listing below pulls live headline news publically available from Apple’s RSS feed. The
data is stored in the string variable, feed.
Line 24 is an assignment statement. The right hand side tells Python to used code (inside
the black box) to read the contents of a RSS feed. The full URL of the site from which to
read the feed is hard-coded as a string in this line. The feed itself is returned as a string and
stored in the variable feed.
Line 28 displays the number of lines in feed. It does this by using the count command
(method) to count the number of newline characters in feed. (A standard technique used to
count the number of lines in a piece of text is to count the number of occurrences of the
newline character, ‘\n’.)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 91
Suggested Activities
1. Download (from GitHub) or key in the full program and make sure it runs properly.
2. The feed URL is hard-coded into the program (line 24). This means that a programmer
must change the code every time a different feed needs to be read.
Modify the program so that it reads the URL from the first line of a text/data file.
Hint #1: You will need to create a file first (e.g. feeds.txt), and save it in your runtime
directory. The file might look something like this:
Hint #2: A solution can be obtained by using four of following lines (in a different order).
3. Extend the code so that it displays the entire feed a) capitalised, b) in upper case and c)
in lower case.
4. Write a line of code that replaces every occurrence of a specific word in the feed with
another word of your choosing e.g. replace the word ‘Apple’ with the word ‘Microsoft’.
Display the new string.
5. Write a code snippet to count and add the number of vowels in the feed. (Later we will
use the plotly library to display these data on a bar chart.)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 92
6. Add the following code snippet to the end of your program and run it.
7. Write code to replace the first two occurrence of a specific word/phrase in the feed with
another word/phrase of your choosing. (You will need to identify some word/phrase that
occurs at least twice yourself.) The output should display the entire feed with the new
word/phrase in place of the original two.
Hint: You will need to use the techniques of indexing/slicing and concatenation to
construct the output string.
8. Same as previous activity except, instead of replacing the two words, your program
should apply the Caesar cipher algorithm implemented earlier in this section.
9. Browse to the official Python site documentation on string methods (see link below) and
identify some method(s) that you have not already used. Now, use the feed from this
activity to test drive your new string method.
https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 93
10. Read the listing below and predict what it will do.
Now key it in and run it. Was your prediction correct?
Experiment!
What happens if you change the URL on line 5?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 94
Section 4
Lists
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 95
Introduction
A list is a collection of variables. The list type is commonly referred to as an array in other
programming languages but as we shall see there are some subtle differences between lists
and traditional arrays.
Lists are useful because they provide us with a means of grouping several variables into a
single variable. The value of each variable is known as a list element and these can be
accessed by using the same indexing/slicing techniques as was described in the previous
section on strings.
Just think about it. Thus far we have been using variables to store single values. This has
been the case regardless of the variable’s datatype i.e. whether it is a string or numeric, only
one value at a time can be stored in it.
The main purpose of lists it to provide a mechanism for dealing with multiple values using a
single variable.
Strings are a special type of list where the individual elements are the individual characters
that make up the string. One key difference between lists and strings, however, is that lists
are mutable, whereas strings are not.
KEY POINT: A list is a Python programming construct useful for modelling any
real world data that can be grouped together under a common name.
Examples of lists include teacher names, schools, subjects, teams, lists of friends, a book
list, a list of tweets, play lists (songs), shopping lists, a list of instructions, lists of countries,
lists of capital cities, days of the week, months of the year, holiday dates, lists of numbers
(e.g. lottery, ages, salaries, sales figures, heights etc.). The list of lists is endless!
Consider for example, scenarios where we needed to keep track of the number of times a
particular event occurred. Let’s say there are multiple possible outcomes and we need to
maintain a count for each one individually. For some reason we might be asked to write a
traffic survey program that counts the numbers of pedestrians, bicycles, cars, vans, HGVs
etc. passing a particular point at a particular time of the day. Without lists we would need to
maintain each count in a separate variable.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 96
Creating Lists
The simplest kind of list is an empty list i.e. one that contains no elements. Empty lists are
created by using a pair of square brackets as illustrated in the code below.
Remember lists are mutable. This means that values can be added, deleted or simply
changed after the list has been created. The following code snippet illustrates how to
initialise lists with data.
Note the use of square brackets on the right hand side and the use of commas to separate
the individual list elements. The number of elements in the lists are 4, 4, 3, 5, 6 and 5
respectively.
Notice also that boysNames, girlsNames, favouriteSongs and fruits are all lists of
strings; vehicleCount is a list of numbers, and accountDetails is a list of values that
have a mixture of different underlying datatypes.
KEY POINT: A Python list can be made up of elements having different datatypes.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 97
One of the key differences between lists and traditional arrays used in other programming
languages is that a Python lists can be made up of data having a mixture of different
datatypes, whereas the elements of an array must all be of the same data type.
It is useful to form a mental image of how lists are represented internally by the computer.
Lists are frequently depicted in either a horizontal or vertical fashion as shown here.
A horizontal memory representation for the list boysNames would look like this.
A vertical memory representation for the list fruits would look as follows.
The key point is that the elements of the list should be envisaged in neighbouring memory
locations (just like the individual characters of a string as described in the previous section).
List five things you have learned about lists so far in this section.
1.
2.
3.
4.
5.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 98
Common List Operations
Because lists and strings are both sequences, all of the common basic operations work in
the same way for lists as they do for string. Specifically, lists can be added to one another
(concatenation), multiplied together, indexed and sliced.
The commands min, max, and len also work for lists in the same way as they do for strings
returning the minimum value, the maximum value and the number of elements (i.e. the
length) in the list respectively.
Concatenation
Lists can also be constructed by concatenating two existing lists together. For example, we
could join boysNames and girlsNames together using the concatenation operator (+) to
form a new list called names as follows.
When a list is used without square brackets like this, Python takes it that every element in
the list is to be used.
The print command on line 4 displays the entire contents of the list. The output generated
by the above code is shown here.
The example below generates the exact same output, demonstrates that concatenation does
not always result in a new list being created.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 99
Some Insights
The previous example provides us with an opportunity to gain some deeper insights into the
Python programming language.
Observe, that by the end of the example, the list variable boysNames will contain the names
of four girls (at least we think they are girls) – Sarah, Alex, Pat and Mary.
Just because we (humans) know that Mary and Sarah are definitely girls’ names, it does not
mean that Python knows this too. In fact, unlike humans, Python does not know the
difference between a girl’s name and a boy’s name. (This is because the language was not
designed to include any built in features to make such a distinction.). To Python, names are
all just strings.
The fact that the previous program instructs Python to assign the girls’ names to a variable
that looks like it was named by the programmer to store the boys’ names could mean one of
two things. Either
a) boysNames was a poor choice of a variable name made by the programmer or,
b) the assignment was a mistake, again, made by the programmer
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 100
List Indexing
Recall from the section on strings, that indexing is a technique used to access individual
elements of a list. List indexing works just like string indexing.
A list element is accessed by using an index which is a zero-based positional value for that
element. As was the case with strings, the index must be an integer (or an expression that
evaluates to an integer), and, must be enclosed inside square brackets.
The graphic below depicts how index numbers can be included as part of the ‘mental image’
we formed for lists earlier.
Every list element is uniquely referenced by the list name and an index number.
The next example program demonstrates how to combine the use of random numbers and
lists to simulate the operation of a fruit machine.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 101
Read the program carefully and see if you can figure out how it works.
One final point worth noting is that when a list element is accessed, the datatype of the
resulting object is the same as the datatype of the list element.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 102
Changing the value of list elements
Lists are mutable objects. This means that the elements of a list can be changed (as well as
accessed). Recall that this is not possible with strings because they are immutable.
It is therefore ‘legal’ to apply the index operator to a list variable on the left hand side of an
assignment statement. The following short program demonstrates this.
Line 1 initialises a list of fruits and line 2 displays the contents of the list
Lines 4-9, each make separate changes to the individual elements in the list that are
‘housed’ at the given index
Line 11 displays the list again
When it is run the program displays the output shown below. Can you figure it out?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 103
Index ‘Out of Range’ Errors
At runtime, Python always checks that index numbers lie within bounds for the object they
are being used to access.
A list index will be out of bounds if it lies beyond the range of the list. If Python attempts to
access a list element using an index that is out of bounds, it returns an out of range index
error and the program will crash i.e. stop functioning.
The whole idea of testing is to safeguard against system crashes happening in live
(production) code.
Run the code and you will see that it crashes on line 3, and lines 6 and 7 never get
executed. Programmers spend much of their time correcting their own syntax errors.
Negative indices can be used on lists in just the same way as they could be used on strings.
The last element of a Python list has an index of −1. Working backwards, the index of each
element is one less than its predecessor. Therefore, the valid indices for a list made up of
four elements would be −4 to 3 inclusive. This is illustrated below.
KEY POINT: In general, the index numbers of any sequence of length of 𝑛 must
lie within the range of −𝑛 and 𝑛 − 1. So, −𝑛 ≤ 𝑖𝑛𝑑𝑒𝑥 ≤ 𝑛 − 1
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 104
List Slicing
Lists can be quite long and sometimes we might just be interested in processing a portion of
the data they contain. We can extract sub-lists from lists using the exact same technique that
we used to extract substrings from strings earlier i.e. slicing.
Slices are created using the square brackets index operator. As was the case with strings,
the colon delimits the start and end positions of the slice we are interested in extracting.
The technique of slicing is demonstrated in the program below.
Can you figure out how the program generates the output shown
inside the comments?
How could we ‘slice out’ the fruits that grow in Ireland?
The slice is taken from the start position up to, but not including, the last position. For
example, the slice created by fruits[2:5} starts at position 2 and continues up to, but not
including, position 5 i.e. from position 2 to 4 inclusive.
If the first position is not specified it is taken to be zero, and if the last position is not
specified it is taken to be the length of the list.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 105
It is worth emphasising the point that a slice is in fact a new list.
For example, the following code results in the new list being stored in the list variable
exoticFruits. The slice is from element 2 to 4 inclusive.
When this program is run the contents of exoticFruits are displayed i.e.
['orange', 'banana', 'kiwi']
Finally, it is also worth noting that Python does not display a syntax error when the end
position specified in the slice exceeds the number of elements in the list. In such situations
Python just slices up to the last element of the list. Therefore, the result of the following code
will be the exact same as the code shown above.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 106
Time to experiment!
Let’s say we have the following initialisation.
Predict the output that would be displayed by each of the print statements
in the program snippet below. Record your predictions in the left column.
Prediction Actual
Now key in (or copy+paste from GitHub) the program and run it.
Record the actual output in the right column.
What value do you think the following expression would generate? Try it!
How does this answer shape your thinking in terms of the relationship
between strings and lists?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 107
Can you find and suggest fixes for the two (not three) syntax
errors contained in the code below?
Syntax Error 1:
Syntax Error 2:
How does this extend your thinking in relation to range errors and slicing ?
Explain the steps you would need to take in order to extend the program’s
functionality to generate and display a random card? (e.g. Ace of Spaces)
What additional issues would you have to consider if the program was
required to deal a random hand of five cards?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 108
List Methods
As data structures go, lists are very flexible. Apart from the basic common operations that
can be carried out on all sequences (e.g. concatenation, indexing, slicing), list objects also
support a variety of additional type-specific commands (methods).
The table below introduces some of these, but a more complete reference can be found by
browsing to the official Python page: https://docs.python.org/3/library/stdtypes.html#mutable-
sequence-types
The del keyword can also be applied to remove individual elements or entire slices from a
lists. del is used in conjunction with the square bracket index operator as follows.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 109
List Methods - Example 1
The following program demonstrates the use of several of these type-specific commands. The
generated output is shown as a comment at the end of each print statement. You should read
through the code and try to understand the list methods used.
Notice that the same dot notation as was described for string methods is also used for lists.
This means in order to use a list method, the programmer must type the name of the list
variable followed by a dot, followed by the method’s name, i.e.
<list-variable-name>.<method-name>
List Methods - Example 2
Try the following.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 110
Two More Strings Methods (split and splitlines)
Another way to create lists is by using either of the string methods – split or splitlines.
These two methods (commands) are very similar to one another in the sense that they both
break a string into separate ‘tokens’. Both methods create a new list with each token
becoming a separate list element.
The main difference between split and splitlines is exemplified by the program below.
(Notice the use of triple quotes to create the block string which spans multiple lines.)
The program creates a new list, bList - each line is a separate element as shown.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 111
Example Program (fruit machine v2)
The program below simulates a fruit machine. The sample outputs shown here should give a
good idea of what the program does.
The purpose of the program is to re-inforce some of the concepts and techniques covered in
this section and also to prepare for the following breakout session.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 112
BREAKOUT ACTIVITIES
The program will make use of four different lists of strings called articles, nouns, verbs
and prepositions. The syntax rule for a valid sentence is that it must have the following
structure:
Valid sentences must be syntactically correct but may not make any sense. For example,
- the teacher taught a student to read makes sense while,
- some school walked under a principal is semantically nonsensical!
Hints:
1. The solution will need to create a list to store the words of the sentence e.g. wordlist
Initially this list will be empty.
2. The words will need to be selected at random from each list. The following line of code
may be adapted to generate a random word.
2
Adapted from a problem in Java: how to program, P.J. Deitel, H.M. Deitel, 9th ed., Prentice Hall, 2012
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 113
Reflection.
What were your main thoughts as you engaged with this problem?
How might this exercise be adapted/extended for use in your own
LCCS classroom?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 114
BREAKOUT 4.2: Data Processing (heights)
At the end of Section 2 we completed a breakout activity based on processing a number of
height values input by the user. We start this activity by presenting a solution to the activity.
The contents of the heights.txt file are shown here to the right. These can be edited and a
new set of values supplied to the program at runtime.
We now add the following program into the mix. This three-liner uses the mean command
from the statistics library to calculate the arithmetic mean of the numbers contained in
the list heightList. If we wanted to calculate the mean of a different set of heights the
programmer would need to change the values in this list.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 115
Suggested Activities
2. Devise a test plan (similar to that shown in the corresponding activity at the end of
Section 2) for the programs. Execute the test plan.
3. Modify the first program so that it uses the statistics package to calculate the mean.
(The variable totalHeight should not appear in the final program.). Repeat the test
plan to make sure your solution works.
The program should be able to deal with a variable number of heights and as well as
decimal values.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 116
In what ways do you think this activity might be used to support the
development of metacognitive skills?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 117
BREAKOUT 4.3: Turtle Directions
The purpose of this activity is to build upon the knowledge we already have about turtle
graphics and apply the concepts from this section to them.
The turtle graphic program shown below contains two lists – angles and distances. Between
them, the lists contain ‘encoded’ data that direct a turtle from point A to point B. The program
listing is as follows:
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 118
Design a set of appropriate activities that adapt/extend this
activity so that it has the potential to elicit your choice of
concepts and/or techniques covered so far.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 119
Section 5
Programming Logic
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 120
Introduction
Thus far, we have been dealing with sequential programs i.e. programs which begin their
execution at the first line and execute each line in order until the last line is reached.
In addition to sequence, Python supports two other control structures known as selection
and iteration. The purpose of this section is to explain the syntax and semantics of selection
and iteration, and explore some common programming techniques used to apply them in
real-world contexts.
Selection
Selection structures are commonly referred to as decisions. These structures provide
programmers with a branching mechanism whereby, certain blocks of code may be either
executed or skipped at runtime. The decision of which block of code to select for execution
depends on the result of a condition also known as a Boolean expression.
The main Python keywords used to support decision structures are if, else and elif.
Iteration
Iteration structures are commonly referred to as loops. Loops are used to cause the same
block of code to be executed multiple times. At runtime, the code inside a loop (the loop
body) is executed repeatedly as long as some condition (the loop guard) is met. The loop
guard is also a Boolean expression.
The main Python keywords used to support iteration structures are for, and while.
Three other (less important) keywords that relate to loops are break, continue and pass.
KEY POINT: Selection and iteration are two programming techniques whose
runtime operations are based on the outcome of Boolean expressions.
Boolean Expressions
A Boolean expression is any expression that evaluates to either True or False.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 121
Hangman!
Hangman is a well-known guessing game usually played by two people using pencil and
paper. One player thinks of a word and the other tries to guess it by suggesting letters within
a certain number of guesses.
3
http://calab.hanyang.ac.kr/courses/ISD_taesoo/05_Hangman.pdf
4
https://en.wikipedia.org/wiki/Hangman_(game)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 122
Study the illustration on the previous page carefully and identify
the areas where sequence, selection and iteration could be used
in a programming solution for the game.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 123
Boolean Expressions
Boolean Logic was invented by the mathematician George Boole, 1815-1864 who was the
first professor of Mathematics at University College Cork (UCC). The algebra on which
Boolean logic is based is used extensively to build electronic circuits and write computer
programs. Boolean logic, therefore, forms the basis of all modern digital devices and
software systems.
Boolean expressions are to Boolean algebra, what algebraic expressions are to algebra, and
arithmetic expressions are to arithmetic. At any given moment in time, a Boolean expression
will evaluate to either True or False. It can never be anything in between.
Boolean expressions are so important that it could be argued that the secret to good
programming lies in the formation of good Boolean expressions. This is the responsibility of
the programmer.
KEY POINT: All Boolean expressions evaluate to one of two values - True or
False.
True and False are two Python keywords which technically behave as if they were the
numbers 1 and 0.
For example, 7 > 3 (seven greater than three) is a simple Boolean expression that
compares the numbers 7 and 3 under the relation of ‘greater than’. It evaluates to True
because 7 is a bigger number than 3. On the other hand, the expression 7 < 3 evaluates to
False, because seven is not less than three.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 124
Simple Boolean expressions (as created by the basic relational operators) are the basic
building blocks used to implement decisions and loops in Python.
Relational operators are binary operators because they need two operands in order to work.
Although in practice operands are usually numeric, operands can be of any datatype that
results from a Python expression. String operands, for example, can be compared using
lexicographic ordering of their constituent characters.
Some more examples of simple Boolean expressions (aka conditions) are presented below.
(Note: 𝑥 = 1, 𝑦 = 0 and 𝑧 = −1.)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 125
Compound Boolean Expressions
Compound Boolean expressions are formed by connecting simple Boolean expressions
together using any of the three Python Boolean operators - and, or, and not.
KEY POINT:
Boolean operators can only operate on Boolean values i.e. True/False.
Just like simple Boolean expressions, compound Boolean expressions always evaluate to
either True or False.
The combinations of values for inputs and their corresponding outputs for and, or, and not
can be conveniently represented in a tabular format known as a truth table.
not is the simplest of the three Python Boolean operators. It is a unary operator meaning
that it can only work on one operand at a time. The truth table showing the relationship
between some proposition A and not A is shown below.
Both and, and or are binary operators meaning that they require two operands to work. The
truth tables for and, and or are shown below.
The (binary) inputs are given by the columns A and B and the output for these inputs is
shown in the rightmost column.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 126
Examples
For the purpose of the examples shown below we will assume that we have a number of
variables assigned as, x = 1, y = 0, z = −1 and valid = True, finished = False
Condition Result
x == 1 and y == 0 True
x == y or z == −1 True
x ! = y and y ! = −z True
not valid False
z ≤ y and finished False
z > y or valid True
finished and not valid False
not finished or not valid True
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 127
The Guessing Game
The remainder of this section will focus on the concepts of selection, iteration and
programming logic. A basic ‘guess the number’ game is used as a platform on which to
develop ideas and techniques associated with these concepts. As new concepts are
introduced they are exemplified by incorporating them so that they add functionality into the
game program. The result is seven versions as follows.
Guess Game v1: This is a basic guess game. The base program generates a random
number which the user is asked to guess. If the user guess is correct the program displays
an appropriate message.
Guess Game v2: This time the program displays a message informing the user that they
were either correct or incorrect based on the value entered.
Guess Game v3: In this version of the game the user is provided with more detailed
feedback about their guess i.e. correct, too high or too low.
Guess Game v4: This is the same as version 3 except that the user is given at most three
chances to guess the correct number. If the user guess correctly within the three allocated
chances the program terminates.
Guess Game v5: In this version of the game, the program continues until the user makes
the correct guess – a subtle but important and powerful enhancement on the previous
version. Each time the user enters a guess the program continues to display one of the three
messages, i.e. correct, too high or too low.
Guess Game v6: A refinement on the previous version whereby after guessing correctly, the
user is offered the opportunity to play the game again. If the user enters “N” for no the game
exits. Otherwise the program generates a new random number and the game starts again.
Guess Game v7: In this final version of the game, the functionality of the game is the exact
same as version 6. However, this version validates any data entered by the user i.e. it
checks that the guess, is in fact, a number before proceeding.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 128
Selection (if, else, elif)
Selection statements are used by programmers to build alternative execution paths through
their code. As already stated they are commonly referred to as decision statements.
Python provides built in supports for three different kinds of selection statements:
- single option (the basic if statement)
- double option (the if-else statement)
- multiple option (the if-elif-[else] statement)
When a running program executes a selection statement, it evaluates a condition, and based
on the result of this evaluation it will decide which statement(s) to execute next.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 129
Example (Guess game v1)
The program below generates a random number between 1 and 10 (number) and prompts
to user to guess the number (guess).
Guessing Game v1
(Uncommenting line 5 will help you test this program faster)
The execution of lines 11 and 12 are conditional upon the result of this evaluation.
Notice the indentation of these lines.
They will be executed only if the condition evaluates to True
o The condition will evaluate to True if the guess entered by the user is the same
as the computer’s generated number
o The condition will evaluate to False if the guess entered by the number is not the
same as the computer’s generated number
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 130
The if-else statement
The syntax and semantics of Python’s double option if-statement are illustrated and
described below.
KEY POINT:
All conditional code must be indented to the same level by the programmer.
Finally, it is important to recognise that the two blocks are mutually exclusive. In any given
run of the program either one block or the other will be executed, but never both.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 131
Example (Guess game v2)
This example extends guessing game v1 by displaying some messages to the user if they
guess the wrong number.
Guessing Game v2
Python will always execute the last line of the above program as it is not part of the if-
else statement
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 132
Compare the logic of the two code snippets below. What do you
notice?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 133
The if-elif-[else] statement
The syntax and semantics of Python’s multiple option if-statement are illustrated and
described below.
The if, elif and else keywords must all be at the same level of indentation.
A colon must be used at the end of any lines containing if, elif and else
then the associated statement(s) are executed and the flow of control continues from the
next line following the end of the entire if-elif statement. If none of the conditions are
found to be True, then Python executes any statement(s) associated with the else.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 134
The logic of an if-elif-[else] statement is illustrated using the flowchart below.
Use the space below to reflect on what you have learned about
Python’s three types of selection statements.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 135
Example (Guess game v3))
This example enhances guessing game v2 by displaying more helpful messages to the user
when they make an incorrect guess.
Guessing Game v3
Think about it – when you ask someone to guess a number between one and ten there are
exactly three possible outcomes. The guess can be
- the same as the number you are thinking of
- lower than the number you are thinking of
- higher than the number you are thinking of
KEY POINT: The multiple option if statement should be used to model situations
from the real world where there are multiple possible outcomes that require
separate specific processing. In this example, that processing is a message
tailored to the user’s response.
In any given run of the above example Python will execute either lines 11 and 12, or 14
and 15, or 17 and 18. These lines are mutually exclusive.
As was the case with the earlier versions of this program Python will always execute the
last line of the above program as it is not part of the if-elif-else statement
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 136
Programming Exercises 5.1:
Fill in the blanks below without altering the logic of the example
program on the previous page. Log your thoughts as you proceed.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 137
BREAKOUT ACTIVITIES (selection)
5
See https://github.com/pdst-lccs/lccs-python/blob/master/Section%205%20-
%20Programming%20Logic/Breakouts/Breakout%205.1%20-%20Task%20Development/README.txt for some
ideas on how to develop this task in the classroom.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 138
Identify and describe five different modifications and/or
extensions you could make to this task that would be suitable
for LCCS
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 139
BREAKOUT 5.2: Automated Teller Machine (ATM) Menu System
The Python program below (copied directly from Section 1) displays the ATM menu shown
on the right hand side.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 140
Iteration (for and while loops)
Iteration is a programming technique that allows programs to execute statements multiple
times. Python provides built in supports for two different kinds of iteration statements:
- the while loop
- the for loop
The syntax and semantics of Python’s while loop are illustrated and described below.
When Python reaches the last line of the loop body the
flow of control loops back to the condition which is
evaluated again. (Python will know the last line of the
loop body from the levels of indentation.)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 141
When (and if) the condition is False Python skips the loop body, and the flow of control
resumes at the next statement following the loop body.
It should be noted that it is the programmer’s responsibility to ensure that the loop body
contains a line of code that will cause the loop condition to eventually become False.
Otherwise, the loop will never terminate. Such loops are called infinite loops.
It is also worth noting out that the loop body might not ever be executed. This situation would
arise when the condition evaluates to False before the first iteration. If this happens the
loop body is skipped and the flow of control continues from the first statement after the loop
body.
Because the condition ‘guards’ entry into the loop, it is referred to as the loop guard.
KEY POINT: The loop body is executed each time the loop guard is evaluated
to True.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 142
Example
This short program shows the main features of a while loop.
The program displays the message Hello World ten times. The string Goodbye is displayed
once before the program exits.
The loop is introduced by the while keyword on line 7. Note the use of colon (:) at the
end of this line.
The condition counter <= 10 is central how the loop operates. The loop will be
executed as long as this condition remains True. The condition is initially True
because the variable counter was initialised to 1 on line 4
The next line to be executed after line 9 is always line 7. (This is the iteration)
Each time line 7 is executed the value of counter will have increased by one since the
previous iteration. Eventually, counter will have reached a value of 11 and the
condition will be found to be False. At this point the flow of control jumps beyond the
loop body and line 12 is the next, and final, line of the program to be executed.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 143
It is well worth investing some time in this example to make sure you understand exactly
how while loops are executed at runtime.
If we define an iteration to be the number of times a loop body has been executed, we can
use the technique of tracing to keep track of the loop’s progress.
Initially, (before any iterations), counter is set to 1, there is no program output displayed,
and the condition counter <= 10 is True. After one iteration of the loop, counter has a
value of 2, the string Hello World is displayed and the condition remains True.
Continue in this way until you complete the ‘trace diagram’ shown below.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 144
Example (Guess game v4)
Let’s say we wanted to enhance our guessing game to give the user three chances.
We start off in the knowledge that version 3 of the program works properly for one chance.
Our enhancement can be achieved simply by ‘wrapping’ the code from version 3 inside a
while loop that runs three times. A solution is presented below.
Guessing Game v4
The technique of wrapping code inside a loop in very important in the development of
computer programs and systems.
Code wrapping is based on a notion that, if a piece of working code can be written using
sequence/selection control structures only, then it should be relatively straightforward to put
that code inside a loop.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 145
Complete the ‘trace diagram’ shown below for Guessing Game v4
The diagram has been complete up to, but not including, the point when the user is about to
enter a guess for the first time (i.e. the first execution of line 13).
The computer has generated a random number of 5 which has been recorded as number.
The value has been displayed and counter has been initialised to zero. The condition
counter < 3 has been evaluated to False and this has also been recorded. You take
over from this point.
Proceed by making up a value (i.e. guessing a number) and recording it in the first box
underneath guess. Now trace the execution of line 14. This requires you (instead of Python)
to evaluate the condition guess == number. Record your answer in the second black box.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 146
Example (Guess game v5)
In this version of the game we will introduce a Boolean variable to enable the program to
continue until the user makes the correct guess (no matter how many guesses this may
take!).
Guessing Game v5
A Boolean variable is a variable used to store a Boolean value. In Python the only two
Boolean values are True and False.
In this example, the name of the Boolean variable is correct. It is initialised to False on
line 7. The use of the variable correct (lines 7, 10 and 15) is the central feature of this
program.
The loop keeps going as long as the correct is False. Logically, this is the same as saying
that the loop continues as long as not correct is True. The only place correct is set to
True is on line 15 which gets executed if and only if the value of guess is the same as the
value of number.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 147
Complete the ‘trace diagram’ shown below for Guessing Game v5
The diagram has been completed up to but not including the first execution of line 12 i.e. the
user is about to enter a guess for the first time.
The computer has generated a random number of 8 which has been recorded as number.
The value has been displayed and the Boolean variable correct has been initialised to
False. The condition not correct has been evaluated to True and this has also been
recorded. You take over from this point.
Proceed by making up a value (i.e. guessing a number) and recording it in the first box
underneath guess. Now trace the execution of line 13. This requires you (instead of Python)
to evaluate the condition guess == number. Record your answer in the second black box.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 148
Example (Guess game v6)
In this version, we add one final piece of functionality. This time when the user guesses
correctly, instead of terminating the loop (and program), this program will ask the user if they
want to play another game. If the user responds with anything other than N (for no), the
program generates a new random number and continues.
Guessing Game v6
This ‘play again’ logic is incorporated by using another Boolean variable, keepGoing which
is initially set to True (line 8).
The loop will continue as long as the condition on line 11 evaluates to True. But the
condition here is simply keepGoing so as long as this variable remains True the loop will
continue.
The only circumstances where keepGoing is set to False is on line 19. Can you figure out
from the code what these circumstances are?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 149
Example (Guess game v7)
In this last version of the program there is no new functionality added. Rather, the program
demonstrates a standard technique used to validate data entered by the user.
If you run any version of the guess game before this and enter a non-numeric value as the
guess you will notice that the program crashes (runtime error). The reason for this is that all
earlier versions make the (incorrect) assumption that a user will always enter the correct
type of data, which is not very realistic for any production system.
Guessing Game v7
Take some time to study the validation technique used here (lines 12 – 15) and see if you
can figure out how it works. The condition on line 14 is key. Also notice that lines 12 and 15
are identical but appear at different levels of indentation. A good starting point would be to
isolate the four lines of code into a separate program and experiment.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 150
The following pseudo-code outlines a general pattern used to ensure some value entered by
the end-user is valid.
Experiment!
Try making the following changes to see what happens.
- Version 4 change the initial value of counter to 10
- Version 5 change the initial value of correct to be True
- Version 6 change the initial value of keepGoing to be False
- Version 7 remove (comment out line 18
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 151
The for loop
The for loop is a more specific iteration construct than its while counterpart in the sense
that it is designed specifically for stepping through the items in a sequence.
for loops are the preferred looping mechanism when the number of required iterations is
known in advance (of runtime). Because of their nature they are also commonly used to
traverse strings and lists (which are both sequence types).
The syntax and semantics of a for loop are described and illustrated as follows:
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 152
Example
The short program serves to demonstrate main features of a for loop.
The program output shown to the right above displays the message Hello World ten times.
The value of counter is also displayed alongside the string. The string Goodbye is displayed
once, before the program exits.
The first thing to observe is how much shorter this program is compared to the simple while
loop program we say earlier.
In order to understand the example, it is helpful to understand how range works. Range can
be thought of as a built-in function which returns a list of values. In the above example the
call range(10) returns a list of all the integers from 0 to 9.
(see https://docs.python.org/3/library/stdtypes.html#typesseq-range for a complete
description.)
The for loop works by iterating over each value in the sequence (i.e. 0 through to 9). At the
start of each iteration the value of the next item in the sequence is assigned to the loop
variable counter.
Notice how at the start of each iteration the iterating variable is assigned the next value in
the sequence. The loop ends when the last value in the sequence has been used.
Once the loop terminates, execution continues at the next line after the loop body.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 153
Example 1 - using a for loop to draw the square
Recall from section 1 of this manual the following code which uses the turtle graphics library
to draw a simple square as shown.
We are now ready to attempt our first for loop programming exercises.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 154
Programming Exercises 5.2 (for loops)
1. Wrap the following code blocks in for loops to create the shapes shown.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 155
3. The pygame program below displays the first three rows of the chequer board as
outlined in the breakout session following Section 1 of this manual.
# Row 1
pygame.draw.rect(windowSurface, BLACK, (0, 0, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (100, 0, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (200, 0, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (300, 0, 50, 50))
# Row 2
pygame.draw.rect(windowSurface, BLACK, (50, 50, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (150, 50, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (250, 50, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (350, 50, 50, 50))
# Row 3
pygame.draw.rect(windowSurface, BLACK, (0, 100, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (100, 100, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (200, 100, 50, 50))
pygame.draw.rect(windowSurface, BLACK, (300, 100, 50, 50))
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 156
When the program is run it displays the pattern illustrated below.
Use the space provided to record how you might modify the
program to exploit the power of loops
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 157
Dice Frequency Program
The program below simulates a one roll of a die by generating a random number between 1
and 6 and repeats this process one thousand times. The program then uses the plotly
library to display a bar chart depicting the frequency count for 1000 rolls of a 6 sided die.
Experiment!
Key in (or copy+paste from GitHub) the program and make sure it
runs without any syntax errors.
1. Modify the code by altering the number of dice rolls. What do you notice? What
hypothesis could be developed by using this program?
2. Examine the three bar charts on the next page. Can you explain the differences?
3. How might this exercise be adapted to some different context suitable for LCCS?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 158
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 159
BREAKOUT ACTIVITIES (Iteration)
6https://github.com/pdst-lccs/lccs-python/blob/master/Section%205%20-%20Programming%20Logic/Breakouts/Breakout%205.3%20-
%20Text%20Analysis/Harry%20Potter%20and%20the%20Chamber%20of%20Secrets.txt
7 https://github.com/pdst-lccs/lccs-python/blob/master/Section%205%20-%20Programming%20Logic/Breakouts/Breakout%205.3%20-
%20Text%20Analysis/Alice%20in%20Wonderland.txt
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 160
The data shown was generated by the program listing shown below.
Using your knowledge of plotly picked up from previous exercises can you add
the necessary lines to the above program so that it generates a chart similar to that
shown below – notice that number of most common words is reduced from 20 to 10.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 161
BREAKOUT 5.4: Sample Applied Learning Task 2
Study the program below carefully and answer the questions that follow8.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 162
Identify the Python constructs and features contained in this
program that you have learned about in this workshop.
Does the program contain any features that you are not familiar
with? If so, what strategies would you use to overcome this
knowledge deficit?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 163
Discuss the program in the context of LCCS ALT 2 and devise a
suitable brief/assessment instrument to which this (or some
variation of this) would be a possible solution. You should state
all pre-requisites, requirements and assumptions clearly.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 164
BREAKOUT 5.5: Maths Multiplication Tutor (MMT)
For this final task you are required to implement a Python maths tutor using the guess game
we developed earlier to guide you along the way. Version 1 is provided below.
Your implementation should be phased along the same lines used during the development
of the guess game i.e. complete each version before moving on to the next.
MMT v1
This is a basic version provided above. The computer generates two random numbers and
prompts the user to enter their product. If the user’s answer is correct the program displays a
message.
MMT v2
This time the program should display a message informing the user that they were either
correct or incorrect based on the value they enter.
MMT v3
In this version of the application the user should be provided with more detailed feedback
about their answer i.e. correct, too high or too low.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 165
MMT v4
This is the same as version 3 except that the program should use a while loop to give the
user at most three chances to get the correct answer.
MMT v5
In this version of the application, the program should continue until the user gets the correct
answer. Each time the user enters an answer the program continues to display one of the
three messages, i.e. correct, too high or too low.
MMT v6
This version should refine the previous version so that after entering the correct answer, the
user is offered the opportunity to continue with a new expression. If the user enters “N” for
no the application should exit. Otherwise the program should generate two new random
number and the application should start again.
MMT v7
In this final version of the application, the functionality should remain exactly the same as
version 6. However, this version should validate any data entered by the user i.e. it checks
that the user’s answer is in fact a number before proceeding.
1.
2.
3.
4.
5.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 166
Take one example task/program you encountered so far in this
manual, and describe how it could be adapted to a different
context to teach some aspect of Python.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 167
Section 6
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 168
Introduction
Functions are the building blocks of programs. They allow programmers to organise their
code into logically-related sections.
In order to understand where functions fit into the overall scheme of things it is useful to
have some understanding of the architecture of a Python program. This is depicted in the
following illustration
As can be seen a Python program is typically made up of many components. One of the key
components is called a module. Modules can be thought of as individual Python script files
(i.e. a file with a .py extension) made up mostly of functions. It is useful to think of a Python
program as a collection of modules.
At runtime, modules and function co-operate with one another to achieve some desired
result. Program execution starts in one special module called the top level module which is
also commonly referred to as the ‘main’ program.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 169
Modules can be classified into the following three groups:
1. User-defined modules: These are modules that are written by the programmer as part
of the program which is being developed (aka the current development)
2. Standard library modules: These are modules that come pre-installed as part of
Python. The Python standard library is designed to save programmers from having to
come up with their own solutions to common programming problems. As such, it
comprises a full suite of off-the-shelf, ready to go solutions in the form of built-in
functions.
Some examples of Python libraries we have already come across are math, random,
statistics, and turtle. See https://docs.python.org/3/library/index.html for a
complete reference.
3. 3rd party modules: These are modules that are developed by an external source either
for commercial purposes or as open source. There are literally thousands – some
examples include tkinter, numpy, plotly, scipy, Django, and flask. The Python
Package Index (PyPI) is a repository of software for the Python programming language.
See https://pypi.org/ for more information.
KEY POINT: A Python program consists of one or more modules and modules
are made up of functions. Each individual module is a Python script or .py file.
So, modules and functions are constructs used by programmers to organise their code into
separate units (or chunks). A package is another such construct – it is used to group a
number of related modules into a single entity. Conceptually, it is helpful to think of a
package as a set of modules that reside on the file system in the same folder/directory.
Programmers can use the Python import statement to make the functionality of external
modules accessible to the script they are currently developing. These external modules can
be individual modules or multiple modules that have been grouped together into a package.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 170
For the purpose of Leaving Certificate Computer Science (LCCS), a typical Python program
might be made up of a single file that draws on and exploits the functionality made available
by the standard library and, potentially, some other third party package(s).
Most Python files are organised into three sections – the import statements (typically at the
top), the function definitions (by far the longest and most important section) and finally the
main code i.e. the section from where the program execution begins.
Functions
The ‘art of computer programming’ can be seen as a process of designing and creating
individual functions and combining them together into larger units of code called modules.
Over time, programmers combine these modules to produce the final program.
We have already learned that functions provide a means for programmers to organise their
code, but what exactly is a function and why are they important?
KEY POINT: A function is a short piece of re-usable code that carries out a
specific task.
In certain cases, the programming problems are so common that Python provides a built-in
function to do the job. Such functions are called built-in functions.
In other cases, the problem to be solved is so specific to the program being developed that
the programmer needs to design and write the code themselves. Such functions are called
user-defined functions.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 171
All functions, regardless of whether they are built-in or user-defined are given a name as part
of their definition. The function name can then be used in a program to invoke the code
contained in the function.
We’ll examine the syntax and semantics of defining and invoking functions shortly but first
let’s take a closer look at the two main reasons why functions are considered important:
1. they lead to modular systems
2. they can be used to maximise code reuse and minimise code redundancy
Large scale software systems are very often developed by breaking big problems down into
smaller problems (decomposition). While designers and programmers are working on the
detail of one part of the system they can ignore the rest of the system (abstraction).
Functions are a programming construct that support this divide and conquer approach to
software development. They lend themselves to modular systems which are easier and less
costly to maintain than their non-modular counterparts.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 172
A second reason why functions are so important is that they can be used to minimise (and
even avoid) code duplication. Consider the following example.
The above code is considered poor design because it contains duplication. Lines 1,2 are
duplicated in three different places. This is an example of redundant code. To eliminate the
redundancy, we write a function to display the chorus.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 173
The program below uses a function to eliminate the duplication referred to earlier.
Every function must have a name (assigned by the programmer). In this case, the name of
the function is displayChorus and it is defined (or made known to Python) on lines 1–5
inclusive.
The lines from line 7 onwards are executed in sequence. Lines 7, 12 and 17 call the function
displayChorus. Every time the function is called the lines 2-5 are executed. Even though
these lines only appear once in the program they are used on three different occasions.
KEY POINT: When a function is called, the flow of control jumps to the first
line of the function and execution continues from that point to the last line of
the function. Once the last line of the function has been executed the flow of
control jumps back to the point from which the call to the function was initially
made.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 174
Example 2 – Modular Code
Let’s continue with the same example to demonstrate the use of functions to develop
modular code.
In this program, the code to display each part of the poem is ‘factored’ into separate
functions. The program is considered better than the two previous versions because it is
more modular. Modular code is the result of good design and is both easier and less costly
to maintain than non-modular code.
Lines 19-23 are executed in sequence and cause the poem to be displayed.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 175
Summary
A Python program is made up of one or more modules. Each individual module is a
Python script or .py file
Modules are made up mostly of functions.
Functions are the building blocks of modules (and by extension, programs)
A function is a short piece of re-usable code that carries out a specific task.
All functions have a name which must be used to invoke the function’s code
Python comes with a set of pre-installed modules - called the standard library
Logically related modules can be grouped together into packages. A package is made up
of multiple modules.
The functionality of individual modules and entire packages can be made accessible to
other Python files by using the import statement
Functions that do not require the import statement in order to be accessible are known
as built-in functions e.g. print, input. Python 3.6.x comes with 67 built-in functions;
these are listed in the appendix – more details can be found by browsing to
https://docs.python.org/3/library/functions.html
Reflect on what you have learned about functions so far. Use the
space below to explain what functions are and why they are
important.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 176
Basic Function Syntax
Once the ‘need’ for a function in your program has been recognised (the difficult bit!) the
next step is to write the code. For this, we need to understand some syntax (the easy bit!).
Functions are made known to Python by writing a function definition. In Python, the function
definition is made up of two parts - a header and a body.
- the function header (aka the function signature or prototype) is always the first line of the
function definition
- the function body contains the Python statements required to carry out the work of the
function.
The code below illustrates the definition of a function called displayPoem. The function
header is on line 1 and the function body runs from line 2 to 5 inclusive.
The function header (this is the very first line in the function definition)
Every function header is composed of four separate parts:
(i) The word def: This is a Python keyword which tells Python to create a new function
object. Every function must start with the def statement.
(ii) The function name (in this case displayPoem):
It is up to the programmer to decide what name to give a function. The rules for
naming functions are the same as those for naming variables.
(iii) Brackets: These provide a mechanism for passing information into functions. In this
example, no information is being passed into the function and therefore nothing
appears between the opening and closing brackets.
(iv) Colon: The colon is used to terminate the function header. If the colon is omitted,
Python will display a syntax error.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 177
The function body
The body of every Python function consists of one or more Python statements. These
statements combine to provide the function’s task. Although there is no limit to the number of
statements that can be in a function body, it is generally considered good practice to keep
functions short.
Notice how the four lines of code that make up the function body (lines 2 – 5) are indented.
In Python, the statements inside a function body must always be indented. The function
body ends when the indentation ends i.e. when the next statement appears at the same
level of indentation as the def statement.
Calling a function
It is important to realise that the code inside a function body will not be executed unless the
programmer explicitly requests it to be. The term for such a request is a function call.
KEY POINT: A function call causes the code inside the function body to be
executed.
Functions can be called (or invoked) at runtime by writing the name of the function followed
by brackets. The code to call the function displayPoem is shown below.
When the above call is made the four lines in the function body are executed thus causing
the following four lines of text to be displayed on the output console.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 178
Call semantics
Consider the order in which the lines of code in example program below are processed by
Python.
Python starts at line 1 and notices that it is a function definition and skips over all of the lines
in the function definition until it finds a line that is no longer included in the function (line 8).
On line 8 it notices that it has a function to execute, so it goes back and executes that
function – lines 2-6 inclusive. Once all the lines in the function body have been executed it
continue at line 9. The result of the above program is:
The Start!
Jack loves to do his homework
He never misses a day
He even loves the men in white
Who are taking him away
The End!
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 179
Design and write a function to display the output shown below.
Write a line of code to call your function.
Study the program shown carefully and identify two syntax errors.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 180
Guidelines and Rules for Naming Functions
We begin with a few simple guidelines as opposed to actual rules. These guidelines help
improve program readability (and therefore maintainability).
Function names should be meaningful i.e. they should in some way describe what the
function does. Since functions are usually actions, the name should contain at least one
verb.
If a function name is only one single word, the convention is to use lowercase; if the name of
the function is made up of more than one word, the use of camel case or underscore as a
means of delimiting the words is considered good practice.
a) sendTweet
b) calculate_salary
c) _login
d) bin
e) 2binary
f) MAX_OF_3
g) Binary Search
h) Search*
i) return
j) Print
k) doSomething
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 181
Function Parameters and Arguments
Let’s return to the homework function we were looking at earlier and ask the question – how
can we modify the function to display the verse using names other than Jack?
One solution would be to have a different version of the function for each different name we
wanted to have it display, but this would contradict the whole purpose of functions which is to
eliminate code duplication.
What we really want is some way of telling the function what name to display as part of the
verse i.e. we need a means to pass information into the function from the code outside the
function. This is exactly the purpose of parameters.
A parameter is a special kind of variable which appears as part of the function header and
can be used inside the function body. Take a look at this!
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 182
KEY POINT: A function parameter is a variable which gets it value from the
argument passed in. When a function is called value of the argument is
assigned to the parameter.
Notice personName appears between the brackets in the function header? This is a function
parameter. Parameters are received by functions.
Notice also the text David between brackets in the function call (line 8)? This is a function
argument. Arguments are passed into functions.
Hello World
How are you today?
When more than one parameter is received by a function they are separated by commas.
For example, the two parameters msg1 and msg2 are separated by commas on line 1.
Similarly, when more than one argument is passed into a function they are separated by
commas. For example, on line 6 above the two arguments, Hello world and How are you
today? are both separated by commas on line 1.
Parameters are received into a function in the same order as the arguments provided. Check
what happens if the arguments were switched around like this in the function call on line 6.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 183
Thus far in this section the arguments used in the example programs have all been string
literals. However, arguments can be literals of any datatype (e.g. numeric, Boolean etc.);
arguments can also be expressions made up of variables and/or literal values together.
Be careful though - as a general guide the number of arguments provide should match the
number of parameters provided for in the function header.
Experiment!
Predict what the following calls to the function displayMessage
would do? After making each prediction you should use Python
to see if you were correct.
1.
2.
3.
4.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 184
5.
6.
7.
8.
9.
10.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 185
Reflect.
What conclusion(s) about the syntax and semantics of parameters
and arguments did you arrive at from the previous experiment?
Devise a number of test cases that would test the assertion that the
number of arguments passed in as part of the function call should
match the number of parameters provided for in the function header
KEY POINT: The advantage of using parameters and arguments is that they
make functions much more flexible and provide for more general solutions to
problems.
The runtime behaviour of a function can be altered by passing different arguments into it.
This is useful, and a very common way, of achieving abstraction.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 186
Function Return Values
Functions can be thought of little machines (black box) that accept input(s) and produce
output(s).
In the previous section we learned that data can be passed into functions through the use of
arguments (at the function call) and parameters (as part of the function header). In this
section we explore the use of the return statement as a means to pass data out of a
function.
Consider the function shown below to add the first n non-negative integers.
range(n) generates a list of integers from
0 to n-1 e.g. range(10) [0, 1, 2, 3, … 9]
The function works by maintaining a running total of all the numbers from 0 to n+1 in the
variable total. At the start of each loop iteration, the loop variable (i) is assigned the next
value in the sequence. On each iteration of the loop, the value of the loop variable is added
to total and the result is used to update total with the new running total. The loop ends
after the last value in the sequence has been processed.
Line 7 shows the return statement being used to pass the value of total out of the
function.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 187
Experiment!
Key in (or copy+paste from GitHub) the above code and make
the function call. Explain why nothing appears to happen?
The reason nothing appears to happen is that although the function is called and it does
calculate and return the sum of the first 10 non-negative integers, the calling code takes no
action to save or process the result.
KEY POINT: The return value of a function can be saved for further processing
by making the function call part of an assignment statement.
Line 9 in the code below assigns the result of the function (i.e. total) to the variable
answer.
The value of total is passed out of the function (line 7) and assigned to the variable answer (line 9)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 188
Alternatively, the programmer may decide there is no need to save the result of a function in
a variable and process the result as part of the call. This type of inline processing is shown
on line 10 of the code below where the result of the function is passed in as an argument to
the print built-in function.
In this example the result of the function is not caught by the calling code. Rather, it is
passed directly as an argument to print. This technique is called function composition.
In situations when a functions are used directly as arguments to other functions, Python
starts at the innermost function and works its way out i.e. the inner function is always
evaluated first and evaluation continues from right to left.
For example, let’s say we had a function called sub to subtract two integers (b from a) as
shown below.
When run, the code would display 3, −5, and −2 on separate lines.
As a final note it is worth pointing out that It is not always necessary for a function to return
data. A return statement may be omitted entirely or can be used without an expression (i.e.
just return on its own). In both cases the value returned by Python is None.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 189
Examples and Exercises
Study each of the following examples carefully – read the code first, predict what it would do.
Then, key the code in and run it to test your prediction(s). In each case you should complete
the reflection exercise provided before you finally move on to implement the programming
challenges at the end.
1. Modify the program so that the constant values (e.g. 9/5, 32 and 0.62) are
stored in variables
2. Extend the program with functions to convert from a) miles to kilometres and b)
Fahrenheit to Centigrade
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 190
Compound Interest
The program below can be used to find out which would yield a greater future value:
Scenario A: €10,000 at a rate of 5% for 10 years or
Scenario B: €10,000 at a rate of 10% for 5 years
The formula used is 𝑭𝑽 = 𝒑(𝟏 + 𝒊)𝒕 where, 𝑝 is the initial principal, 𝑖 the interest rate,
expresses as a decimal, and 𝑡 the time in years.
(pow(x,y) is a built-in function that returns x raised to the power of y.)
1. Modify the program so that it can accept the values for principal, interest and
time from the end-user
2. Extend the program so that it can compare compound interest with simple
interest
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 191
Maximum of Three Numbers
The function below finds and returns the largest of any three integers.
The solution is based on three, two-way comparisons in which each of the integers is
compared to the other two. The individual comparisons are combined into a compound
Boolean condition using the and operator.
Reflect.
How has this example extended your knowledge in relation to forming
Python Boolean expressions?
1. Modify the program so that it prompts the end user to enter three values and
then displays their maximum in a meaningful output message.
How would this implementation be altered if the three numbers were a)
randomly generated or b) read from a file?
2. Use the flowcharts on the next page to implement two alternative solutions for maxOf3
3. Design a flowchart to find the minimum of three numbers.
4. Use your flowchart to implement a function to find the minimum of three values. Call it
minOf3. You could start by copying and pasting the maxOf3 function definition and
renaming it.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 192
Flowchart 1
Flowchart 2
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 193
Boolean Functions
Boolean functions are functions that return either True or False usually to indicate the
outcome of some test. By convention the name of a Boolean function starts with the prefix
is e.g. isEven might be a Boolean function that tests the ‘evenness’ of a number.
The line is the key. Here, the call to the function appears as part of a
conditional statement. This is fine, since conditions evaluate to True or False and the
function isEven is guaranteed to return one of these values.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 194
A prime example
A prime number is a positive integer that has exactly two factors; itself and 1.
The Boolean function below isPrime determines whether the number passed in is prime or
not. The function will return True if number is a prime number; False otherwise.
The function works by attempting to divide every integer from 2 up to half the number being
tested (numToCheck) - if the division leaves no remainder, it means the number being
checked has factors and is therefore not prime. The following exercises, based on the test
harness provided are designed to be used to explore the function isPrime.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 195
A case study of leap years
Boolean functions provide a useful framework which can be used to determine whether a
given year is leap or not. One example is presented as follows:
2000
1900
2017
2012
2100
2400
2600
Use the code to derive and record five facts about leap years
1.
2.
3.
4.
5.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 196
Now examine the two implementations below – one is correct and
one contains a subtle error (i.e. one version reports incorrectly
that 2000 is not a leap year.)
In isLeapV2 above can you justify the need for the second elif
block? Explain.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 197
Encapsulate the code shown below into two functions – call them
isLeapV3 and isLeapV4
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 198
Using Functions to Validate Data
Functions provide programmers a convenient way to organise code that perform specific
tasks such as data validation. Consider the following scenarios and examples.
1. One common scenario faced by novice programmers is the need to read non-negative
integers from the end user. Since the input command returns a string we need to write
code that ensures the data entered is numeric before converting it to an integer using
int
The following four solutions (and there are many more!) are offered for consideration.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 199
2. Building on the previous scenario, it may be that we need to make sure that the number
entered is within a specific range.
Compare and contrast the two solutions. What is the main difference?
Comment on the use of the flag valid in the above code. Under what
circumstance is the value of valid set to True?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 200
Programming Exercises 6.1
1. A factor is any integer which divides exactly into another integer.
For example, 5 is a factor of 20 because 5 divides exactly into 20 (20 ÷ 5 = 4) leaving no
remainder.
The code below depicts two Boolean functions isFactorV1 and isFactorV2. Both
accept two parameters, n1 and n2 and return True if n2 is a factor of n1; False
otherwise.
2. The greatest common divisor (GCD) of two integers, a and b is the largest integer that
divides both of them with no remainder. Study the steps shown below to find the GCD of
63 and 72:
Design and implement a function to find the GCD of any two positive integers.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 201
3. Write a program that reads a date as three integers (day, month and year) from the
keyboard. The program should output the message Valid if the date is valid and Invalid
otherwise. A valid date is any date spanning from 01/01/2000 up to the current date.
4. Ordinal numbers are the words representing the rank of a number with respect to some
position (i.e. first, second, third, etc.). Ordinal numbers are alternatively written in English
with numerals and letter suffixes: 1st, 2nd, 3rd, 4th, etc.
Hint #1: If the number ends in 11, 12 or 13 the suffix is ‘th’. In all other cases the suffix can
be determined from the last digit of the number from the table below.
Number 0 1 2 3 4 5 6 7 8 9
Suffix th st nd rd th th th th th th
Hint #2: The last two digits of a number can be extracted by using modulo 100 and the last
digit of a number can be extracted by using modulo 10.
Hint #3: The solution can be arrived at by re-arranging the code below into the correct order
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 202
5. Modify the program from exercise 3 to display the date in the format d MMM yyyy,
where,
- d is the ordinal day number
- MMM is the abbreviated month name (i.e. Jan – Dec)
- yyyy is the four-digit year.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 203
d) Investigate different strategies (e.g. plotly, Microsoft Excel) you could use to illustrate
the data in a histogram such as the one illustrated below9.
9
Taken from https://en.wikipedia.org/wiki/Computus#/media/File:Easter_Distribution.svg
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 204
Recursion
Recursion is an example of a divide-and-conquer problem solving technique whereby a
solution is expressed in terms of a simpler version of the same problem.
The factorial of a non-negative integer, 𝑛 can also be defined as 𝑛 multiplied by the factorial
of 𝑛 − 1 (for all 𝑛 > 0). This can be expressed mathematically as follows:
Notice how this definition defines factorial in terms of itself. This is the essence of recursion.
The code below shows both non-recursive and recursive implementations of factorial.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 205
Let us consider how 5! would be evaluated recursively.
The evaluation can be considered in two stages. In the first stage (illustrated below) the
number whose factorial is being sought is multiplied by the factorial of the previous number.
This ‘chain’ of operations continues until 0! is reached.
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2!
2! = 2 × 1!
1! = 1 × 0!
0! = 1
In the second stage of the evaluation the chain is ‘unwound’ starting from the evaluation of
0!. The result of this enables the completion of each successive step up the chain until 5! is
reached. This is depicted as follows
0! = 1
1 × 0! = 1
2 × 1! = 2
3 × 2! = 6
4 × 3! = 24
5 × 4! = 120
5! = 120
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 206
The plotly library module can be
used to create a visualisation of the
factorials of the first six non-negative
integers.
To understand why it is the case, it is first necessary to understand two concepts: the
program context and the call stack.
The program context can be thought of as the internal program state used by Python as it
executes a program. The program state consists of data such as the address of the current
instruction, variables and their values. The call stack is an area of memory where Python
saves the program context when a function is called. So, every time a function is called,
Python makes a copy of the current program context and saves it on the call stack. When
the flow of control eventually returns to the function, the contents of the call stack are loaded
back in as the current program context. (This process is referred to as popping the stack.) In
this way, a program can continue running with the same context it was using at the point
when the call to the function was made.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 207
The code shown here to the right is a
recursive implementation of the sumOfN
function described earlier. The purpose of
the function is to return the sum of the first
n integers.
This is the program context at the point when sumOfN(5) was called. The call stack is
progressively built up in response to the successive recursive calls to the sumOfN function
made on line 6. This continues until sumOfN is called with an argument of zero.
The current program context is saved on top of the stack each time the function sumOfN is called
At this point the condition on line 3 evaluates to True and the stack begins to unwind on a
last-in, first-out (LIFO) principle. The program context at the point of each call to sumOfN is
restored in the reverse order to which it was saved. The addition operation on line 6 is
completed for each call, eventually leading to an answer of 15.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 208
Explain the recursive nature of any/all of the following
a) The process for finding the nth Fibonacci number, n>1 (see bottom of page)
b) The process for finding the greatest common divisor of two numbers (Euclid’s algorithm)
c) The process for finding the lowest common multiple of two numbers
d) A binary search
e) A sorting algorithm of your choice
Fibonacci
A Fibonacci sequence is defined to be made up of Fibonacci numbers as follows:
- the first Fibonacci number is, 𝑓𝑖𝑏(0) = 1
- the second Fibonacci number is, 𝑓𝑖𝑏(1) = 1
- the nth Fibonacci number 𝑓𝑖𝑏(𝑛) = 𝑓𝑖𝑏(𝑛 − 1) + 𝑓𝑖𝑏(𝑛 − 2)
After the first two numbers in the sequence each successive number is the sum of the
previous two.
Thus, the first 7 numbers in the Fibonacci sequence are 1, 1, 2, 3, 5, 8, 13.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 209
Programming Exercises 6.3
1. Test your knowledge of Python by stating whether each of the following statements
relating to function are True or False
Experiment!
It would be a good exercise to design a simple test program to verify each answer.
For example, to find out whether the last character in a function header must always be a
colon simply write a short program with a function header that does not end in a colon. Run
the program and see what happens.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 210
2. Study the code listing below and see if you can figure out what it does. Use the space on
the right hand side to record the predicted output.
OUTPUT
a) Now key the program in and run it. Compare the predicted output with the actual
output. Is the actual output the same as the expected output?
b) How would the output of the program differ if lines 7 and 12 were removed? Try it.
c) What do you think it would be a bad idea to insert a call to the function bar inside the
function foo?
d) Make the changes necessary so that following outputs are generated. Answer each part
separately and in turn.
(i) (ii) (iii)
Starting bar() Starting foobar() Starting foo()
Leaving bar() Starting foo() Starting bar()
Starting foo() Leaving foo() Leaving bar()
Leaving foo() Leaving foobar() Leaving foo()
Starting foobar() Starting foo() Starting bar()
Leaving foobar() Leaving foo() Leaving bar()
Starting bar() Starting foobar()
Leaving bar() Starting bar()
Leaving bar()
Leaving foobar()
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 211
3. The acronym CAPTCHA stands for Completely Automated Public Turing Test(s) to tell
Computers and Humans Apart.
Arrange the blocks of code shown below into the correct order so that it produces a program
that generates a CAPTCHA, displays it to the user, prompts the user to enter this value, and
displays Correct! if the value entered is the same as the computer generated CAPTCHA;
and Incorrect! otherwise.
4. Write a program that reads a password from the end-user and validates it according to
the following constraints:
Passwords must be between nine and twelve characters in length
Passwords can only contain uppercase letters, lowercase letters, digits, and special
symbols.
The following special symbols are permitted: _, +, -, *, /, !, ?, &, @, ^.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 212
5. The Collatz sequence10 is defined as follows for the set of positive integers:
𝑛 → 𝑛/2 (for all 𝑛, even) and 𝑛 → 3𝑛 + 1 (for all 𝑛, odd)
Using the rule above and starting with 6, we generate the following sequence:
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
It can be seen that this sequence contains 10 terms – starting at 6 and finishing at 1.
Although it has not been proven yet, it is thought that all starting numbers finish at 1.
Implement the Collatz sequence algorithm in Python by converting the pseudo-code below.
6. Design and implement a function that finds the sum of all the multiples of 3 or 5 below
1000. (Hint: the answer is 233,168)
7. A perfect number is a number whose factors (excluding the number itself) add up to the
number (e.g. 6 = 3 + 2 + 1). Write a program to list the first four perfect numbers.
8. An amicable pair consists of two integers for which the sum of proper divisors (the
divisors excluding the number itself) of one number equals the other. The smallest pair of
amicable numbers is (220, 284). They are amicable because the proper divisors of 220
are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110, of which the sum is 284; and the proper
divisors of 284 are 1, 2, 4, 71 and 142, of which the sum is 220.
Implement a function isAmicable(n1, n2) to test whether n1 and n2 make an
amicable pair.
10
http://mathworld.wolfram.com/CollatzProblem.html
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 213
BREAKOUT ACTIVITIES (Functions)
In this activity we will develop a modular program with functionality behind each of the menu
options shown above. The system requirements are as follows:
- When the program is started the ATM menu is displayed and the user is prompted to
choose an option
- Once the option is read it should be validated by the system. A valid option is an integer
between 0 and 3 inclusive.
- If the user chooses Option 1 the system will display the account balance
The balance is stored in a variable called balance which is initialised to €0.00 at the
start of every run
If the user chooses Option 2 the system will prompt the user to enter an amount to lodge.
The amount entered will be added to balance whose value will be updated accordingly.
If the user chooses Option 3 the system will prompt the user to enter an amount to
withdraw. The amount entered will be subtracted from balance whose value will be
updated accordingly
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 214
The main program used to drive the ATM menu system is shown here.
b) Identify the names of the built-in functions used and the names of the user-defined
functions required to make this program work.
(continued .…)
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 215
c) Explain how the if statement works (lines 7-14)
f) Predict what would happen if you keyed the code in and ran it
g) Key in the program (or download it from GitHub) and run it. What do you observe?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 216
By this point it should be evident that the main program does not work as intended because
the definitions (bodies) for the functions getChoice, processLodgement and
processWithdrawal are all empty.
These empty function definitions – shown below - are known as a stubs. Stubs are
placeholder functions used as part of the program construction process so that programs
can be run without any syntax errors.
11pass is a Python keyword. When it is executed, nothing happens. It is useful as a placeholder when a
statement is required syntactically, but no code needs to be executed.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 217
The next stage of this activity is to incorporate full implementation
of the four functions (shown below) into the main program. Before
you do this you should first study each function carefully and use
the space provided to explain how each one works
Key in (or download) the four functions and make sure they run without any syntax errors.
Experiment by re-arranging the functions into different orders. After every change make sure
to test your program to make sure it still works properly
Test the system with some ‘normal’ use cases e.g. use the system to lodge €100 or
withdraw €30. What’s the balance before and after the transaction?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 218
Experiment!
Investigate what happens when you attempt the following ….
Evaluate.
Identify any features of the solution that you like/dislike.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 219
Suggested Activities (Modifications)12
1. Modify the program so that it the maximum amount that can be withdrawn in any one
transaction is €200.
2. Modify the program so that the account balance can be read from and stored in a file.
The following hints are designed to help
a) You will need to create the initial file -
call it atm.txt – to store the balance.
Insert the value 0.0 the very first time
it is created Initially
b) The function shown below reads the value from the file into the variable balance.
c) The function shown below writes the contents of the variable balance to the file.
Notice the use of the with keyword as an alternative way to reference file objects.
The use of with is considered good practice.
d) Finally, you will need to insert the calls to these functions at the start and end of the
main program block presented earlier.
3. Design and integrate a Personal Identification Number (PIN) security layer into the
system. Feel free to come up with your own requirements but here’s some ideas to get
you started.
The customer is given three attempts to enter the correct PIN
A valid PIN is any four-digit number (i.e. a value between 0000 and 9999)
The initial PIN to enter the system should be read from a file (e.g. atm.txt)
The menu system should be extended to allow the user to change the PIN
12Before you attempt these activities you will need to download https://github.com/pdst-lccs/lccs-
python/blob/master/Section%206%20-%20Modular%20Programming/Breakout%206.1%20ATM%20System/atm%20-
%20V1%20-%20initial%20solution.py
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 220
4. Global variables are variables that are visible to blocks of code outside the scope of
where they are declared. In this example, the variable balance is global. This means
that the value of balance is visible inside every function which uses the global
keyword.
5. The system requires the user to enter the lodgement/withdrawal amounts. What are the
drawbacks of this? Can you think of any alternative ways these amounts could be
captured by the system? Design a solution.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 221
Further Activities
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 222
Based on what you have learned by completing this activity, use the
code below as an inspiration to develop another activity suitable for
use in the LCCS classroom.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 223
BREAKOUT 6.2: Summing Numbers
Earlier in this chapter we presented a function sumOfN to calculate and return the sum of the
first 𝑛 non-negative integers. The function worked by maintaining a running total as it iterated
over every number up to and including 𝑛. The solution is considered relatively expensive
because it requires 𝑛 iterations (and 𝑛 computations) for 𝑛 numbers.
𝑆= 1+ 2+ 3+ … +(𝑛 − 2) +(𝑛 − 1) +𝑛
𝑆= 𝑛+ (𝑛 − 1) + (𝑛 − 2) + … +3 +2 +1
2𝑆 = (𝑛 + 1) + (𝑛 + 1) + (𝑛 + 1) + … +(𝑛 + 1) +(𝑛 + 1) +(𝑛 + 1)
𝒏 × (𝒏 + 𝟏)
𝑺=
𝟐
13
See https://brilliant.org/wiki/sum-of-n-n2-or-n3/
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 224
Suggested Activities.14
1. A Python implementation of Gauss’s
formula is shown here to the right.
a) Explain the subtle difference between finding the sum of the first 𝑛 even numbers and
finding the sum of the all even numbers less than 𝑛. Use the two listings below to help.
14
Refer to https://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/ for interesting
background reading
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 225
Reflect. How could the derivation of Gauss’s formula and/or the
illustrations shown below be used explain core computational thinking
concepts in the LCCS classroom?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 226
Further Activities
1. Write a program to sum the first n odd numbers
(Write another program to sum all the odd numbers up to n).
1 1
2. The reciprocal of a number 𝑥 is denoted by e.g. is the reciprocal of 5.
𝑥 5
Define a function to sum the reciprocal of the first 10 positive integers i.e.
1 1 1 1 1 1 1 1 1 1
+ + + + + + + + +
1 2 3 4 5 6 7 8 9 10
3. Implement a function that finds an approximation for 𝜋 using the formula provided
4 4 4 4 4
𝜋 =4− + − + − +⋯
3 5 7 9 11
4. Write a program that uses the formula shown to estimate a value for Euler’s constant, 𝑒
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 227
BREAKOUT 6.3: Turtle Graphics and Functions – PART I
Suggested Activities
1. Key in (or copy+paste from GitHub) the code and run with it. Investigate what happens
when you change the values (i.e. 100 and 90). What conclusions about the meanings of
these values can you make?
4. The implementation of drawSquare shown here exploits the fact that a square is a
special kind of rectangle (abstraction). Implement drawRectangle.
5. Design and implement a function to draw a n-sided polygon. (Hint: study the three
function definitions shown carefully – look for patterns and generalise.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 228
BREAKOUT 6.3: Turtle Graphics and Functions – PART II
Study the two listings below carefully and answer the questions that follow.
Listing A Listing B
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 229
Suggested Activities
1. Download the code for Listing B, predict what it does and run it. What does the code do?
4. Modify the implementation of drawAngle so that it accepts the co-ordinates (as well as
the angle size and arm lengths) of the position at which to place the angle.
5. Once you have the previous task complete you should evaluate the design decision to
change the definition of drawAngle.
What are the wider implications to the rest of a program of changing a function header?
6. Investigate whether Python would allow the following two function definitions in the same
program. Would this be a useful feature?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 230
Reflection.
What were your main thoughts as you engaged with this activity?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 231
Further Activities
Code refactoring is the process of restructuring computer code without changing its existing
functionality. Code is usually refactored in order to improve readability and maintainability.
The functions defined in the code below each draw a corresponding shape shown to the
right. Each function relies on the turtle being oriented to the right (i.e. in an eastward
direction) in order to work properly. This is achieved with the call setheading(0).
1. The task here is to look for a common pattern in the shape (or code) and exploit this
pattern to refactor the code without changing any functionality.
Hint: You will need to write a separate function that just draws the part of the shape that is
common to all four shapes.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 232
2. Read the code below carefully and key it in.
a) Write the necessary code to call the functions defined so that each of the three shapes
shown to the right are drawn - all lines are 50 units in length.
b) Identify any repeating patterns in the above shapes and exploit this pattern to refactor
the code without changing any functionality.
c) Define three functions draw2, draw3 and draw9 in terms of the functions defined in the
above code to display the digits as illustrated below.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 233
BREAKOUT 6.4: Using check digits to verify codes
Barcode check digit verification algorithms generally work by calculating a total using the
formula shown below. If the total is evenly divisible by 10 then the check digit is deemed to
be valid.
𝑡𝑜𝑡𝑎𝑙 = (𝑠𝑢𝑚 𝑜𝑓 𝑎𝑙𝑙 𝑡ℎ𝑒 𝑑𝑖𝑔𝑖𝑡𝑠 𝑖𝑛 𝑡ℎ𝑒 𝑒𝑣𝑒𝑛 𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛𝑠) + 3 × (𝑠𝑢𝑚 𝑜𝑓 𝑎𝑙𝑙 𝑡ℎ𝑒 𝑑𝑖𝑔𝑖𝑡𝑠 𝑖𝑛 𝑡ℎ𝑒 𝑜𝑑𝑑 𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛𝑠)
The digits are read from right to left – so the rightmost digit is always taken to be the first
even-positioned digit. The following table shows the positions and the corresponding digit for
the barcode shown at the top of the page.
Digit Positon 0 1 2 3 4 5 6 7
Digit 4 5 2 3 3 8 5 6
The remainder after dividing by ten is zero (i.e.70 ≡ 0 (𝑀𝑜𝑑 10)). Therefore, the check digit
is correct.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 234
The European Article Number or EAN (aka International Article Number) is a worldwide
standard that describes the format for numbers that appear under the barcodes used to
identify retail products. Two of the most commonly used EAN standards are the eight digit
EAN-8 and thirteen digit EAN-13 – illustrated below.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 235
Developing an algorithm to extract digit from a number
The three listings below extract the individual digits from any two- digit, three- digit and four-
digit number respectively
In all of these examples the rightmost digit is always stored in the variable d1.
The value is the remainder after dividing whatever number was entered by 10 (e.g.
83 % 10 = 3, 835 % 10 = 5 etc.).
Sample Input: 83
Output: 3 8
In the above example the leftmost digit is extracted by dividing by 10 (i.e. 83// 10 = 8). This
is stored in the variable d2.
Here, the middle digit is extracted in two steps – first, divide by 10 to leave the first two digits
(i.e. 835// 10 = 83) and then remainder 10 (i.e. 83 % 10 = 3).
This is stored in the variable d2.
The leftmost digit is extracted by dividing by 100 (e.g. 835// 100 = 8). This is stored in the
variable d3. (Note that taking the remainder 10 of does not affect the value)
In the next (and final) example we examine the code to extract the individual digits of any
four-digit number - d4, d3, d2 and d1.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 236
Let’s look at the process for extracting the second digit in from the right, d2. The sample
input is 8352 and we wish to extract the 5. The procedure is to divide by 10 – this gives 835 -
and then use remainder 10 on this to extract the final digit.
A similar procedure can be used to extract the third digit in from the right (d3) i.e. extract the
3 from 8352. This time we divide by 100 – this gives 83 - and then use remainder 10 to
extract the final digit.
Finally the leftmost digit, d4, can be extracted simply by dividing by 1000 i.e. 8352//1000 =
8. Applying remainder 10 to this does not change the value.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 237
Suggested Activities
These activities are based on the short program below which implements an algorithm to
validate an EAN-8 barcode number
1. Key in (or copy+paste from GitHub) the above code and make sure it runs without any
syntax errors.
2. Test the program with a range of valid and invalid EANs
3. Take a close look at the function extractDigit. What would happen if an out of range
index was passed into it?
For example what would happen if the following calls were made to the function -
extractDigit(-1, 869) or extractDigit(3, 869)?
4. Suggest ways by which any problem(s) identified in the previous question could be fixed
and discuss whether any of these solutions need to be implemented.
5. Extend the code with a function to check the validity of an EAN-13 number
6. Implement a function isValidEAN that works for both EAN-8 and EAN-13 numbers.
Hint you will need to do a range test to determine the size of the number
7. Modify the code so that it could work using string representation of the EAN (as opposed
to a numeric representation).
Test your program with the call: print(isValidEAN8("53912343"))
8. Design (and implement) a program to generate a check digit for an EAN-13 barcode (i.e.
given the first 12 digits compute the 13th)
9. Write a recursive function to sum the individual digits of a number
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 238
Reflection.
Describe your experience of engaging with the tasks in this activity.
Consider the following prompts for a learner’s perspective
When I saw a problem for the first time what was my thinking?
What computational thinking skills, if any, did I employ?
What worked well for me? What didn’t work so well?
Were there any limitations to any of my solutions?
What programming skills did I improve/learn?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 239
Further Activities (ISBNs and Credit Cards)
1. An International Standard Book Number (ISBN) is a unique number used to identify
books worldwide. Before 2007 ISBNs were made up of 10 digits and this was extended
to 13 digits from 1 January 2007. The former standard is known as ISBN-10 and the
latter is known as ISBN-13.
ISBN-10: 1-350-05711-8
𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚 = (1 × 10) + (3 × 9) + (5 × 8) + (0 × 7) + (0 × 6) + (5 × 5) + (7 × 4) + (1 × 3) + (1 × 2) + (8 × 1)
𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚 % 11 must be zero
2. Just like barcodes and ISBNs, credit card numbers contain several pieces of information
for performing validity tests. For example, Visa card numbers are always 16 digits long
and always begin with 4. A valid Visa card number also passes a digit-sum test known
as the Luhn checksum algorithm. Luhn's algorithm states that if you sum the digits of the
number in a certain way, the total sum must be a multiple of 10 for a valid Visa number.
Systems that accept credit cards perform a Luhn test before contacting the credit card
company for final verification. This lets the company weed out many fake or incorrect credit
card numbers.
The algorithm for summing the digits is the following. For digits at even indexes (the 0th digit,
2nd digit, etc.), simply add that digit to the cumulative sum. For digits at odd indexes (index
1, 3, etc.), double the digit's value, then if that doubled value is more than 10, add its digits
together to make a number that is smaller than 10, then add this result into the sum.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 240
NOTES
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 241
Section 7
Dictionaries
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 242
Introduction
In plain English a dictionary is something that is used to find the meaning or translation of a
word. In Python a dictionary is a data structure which can be used to store values that can
be looked up and retrieved using a unique identifier known as a key.
Python dictionaries are very similar to Python lists but, as we will soon see, there are some
important differences.
Like lists, dictionaries are useful because they provide a means by which a collection of data
can be manipulated using a single variable. Each element in a dictionary consists of two
parts – a key, which must be unique, and an associated value. These are commonly
referred to as key-value pairs (and also name-value pairs).
The graphic on the left below depicts the mapping between keys and their associated
values. This can be contrasted with the graphic on the right which depicts a Python list of
length N.
A dictionary with N elements. Each element A list with N elements. Each element is
is referenced by a unique key which is referenced by a zero based positional
usually a string or an integer offset known as an index
Recall from Chapter 4 that lists are ordered data structures. This means that Python
maintains the relative ordering of every element in a list. Because the list index is a
positional offset position, operations such as slicing and concatenation make sense for lists.
Dictionaries on the other hand are unordered data structures. Python does not maintain the
order of dictionary elements. This is because elements are retrieved using a key (as
opposed to an index). There is no guarantee that dictionary elements are maintained in the
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 243
same order as they were created. Consequently, operations that depend on order such as
slicing and concatenation are not supported for dictionaries.
Dictionaries are useful for storing a list of values when the values can be identified by some
string or integer (i.e. the key). Keys must be unique and can be of any immutable datatype
(e.g. string, integer) – and values can be of any datatype (simple or compound).
Example 1
In this first example, we define a dictionary called glossary. The dictionary shown below
contains four elements and each element is made up of two parts – a key and a value –
delimited by a colon. The name of the first element in this dictionary is Analyse and the
value of this element is to study or examine something in detail.
In this dictionary each individual word is the key. The key can be used to lookup the value
- in this case the meaning of the word.
Note that in each of the examples in this section the dictionary data is enclosed by curly
braces. The opening brace, ({), tells Python that this is the start of a dictionary definition and
the closing brace, (}), signals the end of the dictionary definition.
KEY POINT: The elements of a dictionary are enclosed by curly braces; each
element in a dictionary is a key-value pair; the key and the value must be
separated by a colon.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 244
Example 2
In this example the dictionary comprises six
elements. Note that dictionary elements are
separated by commas and also that a comma is
allowed at the end of the last element.
As was the case with the last example the datatype of the names and values are all strings
and the elements are all enclosed in curly braces.
KEY POINT: No two dictionary elements can have the same key i.e. the keys
must be unique. Values however, can be duplicated.
Example3
Here, the dictionary numbers can be used
to lookup the Irish word for each of the
numbers from one to ten.
KEY POINT: The datatype of a dictionary key must be immutable (e.g. string,
integer) but values can be of any datatype (including lists and other
dictionaries).
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 245
Example 4
This example defines a dictionary called
capacity which stores the maximum
number of people that seven well known
sports stadia can safely accommodate.
Example 5
In examples 1-4 the keys and values store the same kind of information i.e.
- in example 1 the key is a word and the lookup value is the meaning of that word
- in example 2 the key is a country and the values is its capital
- in example 3 the key is a number and the value is its Irish translation
- in example 4 the key is the name of a stadium and the value is its capacity
It is quite common for keys to be unrelated to one another. Notice how in the following
examples the keys all refer to different things and also the mixture of datatypes in the values.
Dictionaries like these two are useful for representing structured data i.e. data that is
organised in a tabular format in such a manner that values can be identified by unique
names (e.g. field names in a database, column headers in a spreadsheet/csv file)
It is worth noting that dictionaries are referred to as records/structures in other programming
languages.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 246
Creating Dictionaries - syntax
Python supports several different syntaxes for creating dictionaries – so far we have looked
at just one i.e. enclosed in curly braces with key-value pairs delimited by colons and
separated by commas. The general form of this syntax is shown below.
Another way to create dictionaries is to use the built-in function, dict. There are several
variations on the use of dict but for the sake of brevity we will look at just two.
In this first variation (shown below) the dict function is used to create a dictionary called
abbr1 with three key-value pairs. The general form of this syntax is shown to the right. Note
the similarity to the syntax of the earlier examples – basically, this syntax just passes the
entire dictionary (including the curly braces) as an argument into the dict function.
In this next example three keyword arguments are passed into dict. Each argument is
assigned an associated value. This syntax requires that each key is a valid Python identifier
i.e. it cannot begin with a digit, must be made up of alphanumeric characters or underscore
etc. Note the absence of curly braces in this syntax.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 247
When created in this way, the datatype of the dictionary keys is always a string.
The dictionaries resulting from both examples, abbr1 and abbr2 are identical i.e.
Empty Dictionaries
In practice data is usually not hardcoded into programs as illustrated in the examples used
thus far. Rather, data typically enters a running program from some external source such as
the end-user, file(s) or a database. In such cases it can be useful to start off with an empty
dictionary. The three statements below all define an empty dictionary called d.
As a program runs, data can be added to, or removed from the dictionary in accordance with
the needs of the underlying computational model.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 248
Indexing Dictionaries
Recall from earlier that indexing is a technique used to access/retrieve the elements of
strings (section 3) and lists (section 4). Dictionary values can also be indexed but, unlike
strings and lists which both use a zero based integer as a positional offset to access
elements, dictionaries use the key as the index.
Let’s say we have a dictionary called d defined with key-value pairs depicted as shown here.
The code below displays the three values stored in the above dictionary:
Oh My God!
Laugh out Loud
In My Humble Opinion
Dictionary values are accessed by
The output displayed by the code
using the keys as the index
where, dict-name is the name of the dictionary and key is the lookup value to use in
order to retrieve the required element. Note that the key may be a string or an integer.
KEY POINT: Dictionary values are accessed by using their key as the index
(i.e. in square brackets)
The example below demonstrates that dictionary values can be accessed in any order. The
output of each print statement is shown to the right.
In My Humble Opinion
Oh My God!
Laugh out Loud
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 249
SYNTAX CHECK #1:
Attempts to access a dictionary using a key that does not exist result in
Python displaying a KeyError
The problem is that Python cannot find a key entry with the name LOLL in dictionary d and
the probable cause is a typing error made by the programmer.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 250
Keys can be variables
It is useful to be aware that the index used to lookup a dictionary value can be stored in a
variable. Consider the code below.
Line 7 declares a variable called key and assigns the string OMG to it. Line 8 uses the
contents of key as the index to retrieve its corresponding value from the dictionary d. The
result of the lookup is assigned to the variable value. Finally, line 9 causes the contents of
value to be displayed.
Experiment!
Key in (or copy+paste from GitHub) the code below and explain why both
result in a NameError when they are run.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 251
The code below defines a dictionary called capitals and prompts the user to enter one of
the six nation countries.
If the user enters one of the country names that is stored as a key in the dictionary, the
program will display the corresponding capital city. The contents of the variable country is
used as the key to lookup the dictionary capitals.
Experiment!
What happens when the user enters the name of a country that is not in
the dictionary countries? Explain.
Experiment!
What is the purpose of the variable i in the code below?
Change the for loop to for i in range(10): and explain what happens
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 252
Operations to access values
Indexing is not the only technique that can be used to retrieve dictionary values. In fact,
Python dictionaries support a number of operations that can be used for this purpose - two of
these are get and pop
This call returns the value in the dictionary that corresponds to key. If the key
get(key) does not exist the call returns None (unless a default value has been
specified for the key). Therefore, this command never results in a KeyError.
This call returns the value in the dictionary that corresponds to key. If the
pop(key) value is found the element is removed from the dictionary. Otherwise the call
results in a KeyError.
Sample Run 1
Sample Run 2
Notice from both sample runs that the contents of the dictionary grades remain unchanged
after the call to get.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 253
This can be contrasted with the use of pop which removes the element from the dictionary
as shown here.
When the key is found its value is returned and the element is deleted from the dictionary.
One way of avoiding this type of error is to use the in keyword to test the key for
membership before attempting the call to pop. This is exemplified below.
This time when a key which does not exist is entered, a meaningful message is displayed
and the dictionary is left unaltered.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 254
Adding, Changing, and Deleting Dictionary Elements
The technique of indexing can be used to add, change and delete elements. These
operations are now discussed in turn
where, dict-name is the name of the dictionary and key and value specify the key-
value pair of the new element to add.
Get Coding!
Add the following key-value pairs to the dictionary, d defined above
"MUA" : "Make Up Artist"
"SWAG" : "Stuff We All Get"
"WTP" : "What's the plan"
Experiment!
What happens when you try and add a new value to a dictionary using a key
that already exists?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 255
Building up a simple empty dictionary
Imagine we were asked to write a simple program for Twitter that would build up a dictionary
to store information entered about a person/user. Specifically, let’s say we were asked to
build up, and populate a dictionary with the following structure:
The keys (i.e. handle, name, tweets etc.) are shown on the left hand side and the
corresponding values on the right will be entered by the end-user when the following
program is run.
Lines 6, 8, 10, 12, and 14 all assign whatever value the user enters for the specified key into
the dictionary.
Note that decisions about what information a system should sore are usually made (by the
system analysts and designers) before the programmer(s) begin coding. In this case, it was
decided to store the person’s handle and name as well as the number of tweets they sent,
the number of people they are following and the number of followers they have.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 256
The next example builds up a dictionary of student results. The results are stored as key-
value pairs made up of a subject name and a corresponding mark.
In this first version of the program the dictionary stores the student name and one result. A
sample run is shown here to the right
Notice on line 8 that the identifier subject is not enclosed in quotes. This is how the name
of the subject entered by the end-user becomes the key for this dictionary entry.
The obvious limitation of the above program is that it only works for one subject. In this next
version we use a while loop to allow multiple subjects to be entered and stored in the
dictionary.
A sample run of this code (version 2a) shows results for Irish and Maths being entered and
stored in the dictionary.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 257
The next block of code, version 2b is logically equivalent to version 2a i.e. if they are given
the same input they will both produce the same output.
Notice however, the subtle difference between the while loops in the two versions.
In version 2a the break statement causes the loop to terminate. This happens whenever the
user presses return for the subject name.
In version 2b the user is prompted to enter the subject name before entering the while loop
for the first time, and then again at the end of each execution of the loop body. Whenever
the user enters an empty subject name (by pressing return) the loop guard i.e. subject! =
"" is evaluated to False and the loop terminates.
In situations such as this – when there is a choice between more than one logically
equivalent solution to the same problem – the decision as to which implementation to use
usually rests with the programmer and very often boils down to a matter of personal
programming style.
Modify the code in either of the previous two example (i.e. version 2a or 2b) so
that the dictionary stores the results of one single subject for multiple
students. A sample run of the desired program is shown below.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 258
Changing dictionary values
The simplest way to change (update) dictionary values is to use the assignment statement.
Line 7 in the code below illustrates how the dictionary value for key entry LOL could be
changed from Laugh out Loud to League of Legends.
Experiment!
What happens when you try to change a value using a key that does
not exist (e.g. typo error in key)?
Experiment!
Key in (or copy+paste from GitHub) the code below and use the output
to explain what the update command used in lines 12 and 13 does.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 259
Deleting dictionary elements
Dictionary elements can be deleted using the del keyword.
The use of del is exemplified on line 7 below which removes the entry indexed by LOL from
the dictionary.
The effect is to delete the second element, and in doing so, reduce the number of elements
in the dictionary from three to two. The output displayed is:
where, dict-name is the name of the dictionary and key is the lookup value to use in
locating the element to delete. If the key is not found its Python raises a KeyError
Finally, the clear command deletes all elements from a dictionary. The resulting dictionary
is left empty.
Get Coding!
Write code to remove all the elements from the dictionary, d defined above
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 260
Experiment!
What is the relationship between d1 and d2 at the end of this program?
Experiment!
What is the relationship between d1 and d2 at the end of this program?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 261
Experiment!
Explain what happens when you run the following code.
Experiment!
Explain what happens when you run the following code.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 262
Programming Exercises 7.115
1. Study the dictionary definition shown in part b) carefully and answer the questions that
follow:
a) What is the name of the dictionary?
Keys:
Values:
c) Suggest name for two additional key-value pairs that could be added to car
e) Predict what output would be generated by each of the following print statements.
(Note: some of these statements generate an error.)
(i) print(car['make'])
(ii) print(car[model])
(iii) print(car['miles'])
(iv) print(car['colour'][0])
(v) print(car['diesel'][0])
(vi) print(car['reg'][4:5])
15
See Appendix G for solutions
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 263
f) Assume that currentYear is a variable that has been assigned the value of the
current year (e.g. currentYear = 2018). What do you think the statement
print(car['kms']/(currentYear - car['year']) would output?
h) Now create a dictionary definition for car so that the print statements shown below
can run without errors. Use the space provided to record the actual output.
(i) print(car['make'])
(ii) print(car['model'])
(iii) print(car['kms'])
(iv) print(car['colour'][0])
(v) print(car['diesel'])
(vi) print(car['reg'][4:5])
(vii) currentYear = 2018
print(car['kms']/(currentYear - car['year']))
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 264
2. The dictionary colours contains a mapping of five colours in English to Irish. Study the
definition carefully (ignoring the deliberate translation errors for the moment) and answer
the following questions.
a) Write an alternative definition for colours in the space provide on the right.
(Hint: use the dict function.)
b) Predict what happens when the following lines of code are added (individually)
(Hint: None of these statements generate a syntax error.)
(v) colours.update(blue='gorm')
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 265
c) In each of the following blocks of code line 9 reads a value from the end-user and line
11 attempts to use that value as a key to lookup the dictionary, colours. The idea is
to assign the translated colour to the variable, translation.
Each block illustrates a different technique used to retrieve a value from a dictionary.
A. Indexing
B. get
C. pop
For each block (i.e. A, B and C) predict the value of translation given the inputs of white
and orange for colour (six separate runs).
white orange
A.
B.
C.
d) Key in (or copy+paste from GitHub) the code and run it to check all the predictions you
made as part of this exercise.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 266
3. Write a program that defines a dictionary called book. The keys should be isbn, title
and author. You should make up your own values.
4. The code below prompts the end user to enter a month (month_name) and then calls a
function to return the number of days in that month to the variable numDays which is
then displayed.
Define a dictionary called days so that the following implementation of daysInMonth can
be used instead of the one shown above. The two programs will be logically equivalent.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 267
Iterating over dictionaries
Occasionally the need arises to write code to perform some processing on each individual
dictionary element. Such situations can be dealt with by traversing (or iterating over) the
dictionary. A simple example would be to display every key and/or value in a separate
formatted message. Let’s say we have a dictionary defined as follows (both definitions are
equivalent):
Python supports a small number of commands which can be used in conjunction with a for
loop to iterate over the elements of a dictionary. These are summarised in the table below.
items() This call returns a list of all the key-value pairs in a dictionary
[Technically keys(), values() and items() actually return what Python calls a view object. For
the purpose of this manual it is fair to think of view objects and lists as equivalent.]
The use of keys() is illustrated below – the output is shown on the right. Note that, on each
iteration of the loop, the variable k takes on (i.e. is assigned) the value of the next key in the
list of keys returned by the call to results.keys()
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 268
The built-in function sorted can be used to sort the keys – again the output is displayed on
the right:
The following code exemplifies the use of values() to iterate over the individual values held
in the results dictionary. This time the variable v takes on (i.e. is assigned) the next value
in the list of values returned by the call to results.values()
function.
In typical Python fashion there’s usually simpler solution! In this case, the same result could
have been achieved by importing and using the mean function as follows:
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 269
Finally, the use of items to iterate over and display the keys and values in the results
dictionary is illustrated in the code below:
Notice that there are two variables – k and v – in the for loop. The items function actually
returns a list of pairs known as tuples16. There is a one-to-one correspondence between the
tuples and the key-value pairs in the dictionary. On each iteration of the for loop the
variable k takes on the first element of the tuple and the variable v takes on the second.
Once again we can use the sorted function to sort the list of items. The following code
shows how the dictionary can be sorted on its keys.
Finally, the code to sort the dictionary by values is shown below. This code is shown for
completeness only and an explanation is beyond the scope of this manual.
16
A tuple is another Python datatype. Tuples behave very like lists except that their elements cannot be
changed i.e. they are immutable sequences. For more information on tuples see the official Python reference
at https://docs.python.org/3.6/library/stdtypes.html#tuple
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 270
Dictionaries and Lists.
By this stage it should be evident that dictionaries and lists are conceptually very similar data
structures. The main similarities are:
- Both are compound datatypes. This means that they can be used to store (and
retrieve) multiple values using a single variable. (Compound datatypes can be contrasted
with simple datatypes such as, integer, float and Boolean. Variables of these simple
types can only store a single value at any one time.
- Both are mutable meaning that they can grow and shrink dynamically as new elements
are added and old elements are deleted.
- Both support indexing to access elements. However, the semantics of how exactly lists
and dictionaries use indexing is perhaps the greatest distinguishing feature between the
two data structures. This semantics is described as follows.
Lists are indexed using a zero-based positional offset. Dictionaries are indexed using a
key. The datatype of a list index must be integer whereas, with dictionaries the datatype of
the index must match the datatype of the key in the dictionary.
KEY POINT: Dictionary values are retrieved using a key (and not an offset
position as used by lists).
Another significant difference between lists and dictionaries is that lists are ordered
collections whereas dictionaries are not. Dictionary values are mapped by a key and
consequently can exist anywhere in the dictionary. List values, on the other hand exists at a
fixed position defined by its index.
The main implication of this is that certain list operations that depend on ordering (e.g.
slicing, concatenation, append, insert and remove) have no meaning for dictionaries.
Errors which we associate with lists resulting from using an out of range index (i.e.
IndexError) also have no meaning for dictionaries (they have their own types of errors).
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 271
A word on datatypes and usage notes
Lists and dictionaries are among the most powerful data structures offered by Python and
the main reason for this lies in their flexibility – especially when it comes to the wide range
and type of values that they can be used to store. The values stored in lists and dictionaries
can be of any datatype – there are effectively no restrictions.
KEY POINT: There are virtually no limitations to what can be stored in lists
and dictionaries.
Before exploring this point in any more detail it is worth looking at the following graphic which
classifies Python datatypes into two broad groups – simple and compound (aka composite).
Note that Python contains many more datatype than those illustrated and also that the
classification is for illustrative purposes only17. A simple datatype can be thought of as
atomic in the sense that values cannot be sub-divided into further sub-types, whereas a
compound datatype can contain values which themselves can be either simple or
compound.
In terms of the types of values that lists and dictionaries can store, we have a very broad
spectrum. At one end of this spectrum values can be uniform and simple, while at the other
end at the other end it is possible for elements to be of different datatypes and also
compound.
17
Python represents everything as objects so, strictly speaking, it has no simple datatypes.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 272
BREAKOUT ACTIVITIES (Dictionaries)
b) Insert the line print(char) between lines 3 and 4 (indented) and run the program
again. Use your observations to state the purpose of char.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 273
e) Replace lines 4-7 of the original program with the following single line of code.
Make sure it is indented. Run the program again and use the space below to note
any changes in the way it behaves.
a) Browse to the official reference for the get dictionary operation and describe what
it does in the context of the previous question.
https://docs.python.org/3.6/library/stdtypes.html#mapping-types-dict
g) Modify the program so that it only maintains a count of each vowel in the input
sentence. A sample run is shown below.
Hint: As each character is being processed check whether it is a vowel or not; if
the character is a vowel add it to the dictionary and update the counter.
h) Modify the program so that it maintains total count of vowels and consonants.
Hint: The dictionary needs only two keys – vowels and consonants.
A sample run would look like this:
i) Use the structure and patterns contained in the original program to develop a
program that counts the number of occurrences of words in a piece of text. A
sample run of the desired program is shown below.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 274
j) Add the following four lines of code to the end of the original program (no
indentation) and run it. Use the space provided below to describe what the code
does.
b) Experiment! What happens if there are more than one most frequently occurring
letters? How might the code be altered to display all the most frequently occurring
letters?
k) The code below shows a logically equivalent solution to that shown in part j)
above. Which solution do you prefer and why? How might the code be altered to
overcome the limitation highlighted in the last question?
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 275
2. The short program prompts the end-use to enter a sentence and then displays the
frequency count of every word in the sentence. A sample run of the program yields the
following:
Key the program in and run it until you are satisfied you understand what it does.
Now attempt the following. (The knowledge gained from completing part 1 of this exercise
should be helpful)
a) Predict the output of the above program for the following sentences
Have a very merry Christmas and a very very merry New Year
Expected Output:
Expected Output:
Ho ho ho!
Expected Output:
b) Describe the influence of case and punctuation on the way the program works.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 276
c) Suggest ways by which the limitations caused by case and punctuation marks in
the program could be overcome.
d) Design and implement a solution to your suggestion from the previous question.
e) Replace lines 6-9 with a single statement that is logically equivalent i.e. each
word encountered (i.e. the dictionary value) has one added to its frequency
counter if the word already exists in the dictionary; otherwise the word is added
to the dictionary with an initial frequency count set to 1.
f) Modify the program so that it performs the same word frequency analysis on text
read from a .txt file (as opposed to a single sentence typed in by the user).
h) Use the program to calculate the average word length in the entire text.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 277
3. We saw in chapter 5 (breakout activity 5.1) how the program shown here could be used
to display a bar chart with the ten most frequently occurring words from a piece of text
contained in a text file called book.txt.
The task here is to provide an alternative implementation of the above program that
incorporates the use of dictionaries.
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 278
NOTES:
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 279
Appendices
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 280
Appendix A: Python Keywords
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 281
Appendix C: Python Assignment Operators
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 282
Appendix F: Truth Tables for not, and, and or
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 283
Appendix G: Sample Solutions to Selected Problems
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 284
Programming Exercise/ Breakout Activity Solution
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 285
Programming Exercise/ Breakout Activity Solution
Breakout 6.1 ATM System – suggested activities) Q3 –
PIN processing
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 286
Programming Exercise/ Breakout Activity Solution
Breakout 6.4 Using check digits to verify codes. Further
Activities (ISBNs and Credit Cards)
Q2 (Luhn’s Algorithm to validate a credit card number)
Programming Exercise 7.1
Q1 (b) – identify the key-value pairs
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 287
Programming Exercise/ Breakout Activity Solution
Breakout 7.1 Frequency Counters
Q2(e) – count words
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 288
BLANK PAGE
Python Programming: A Manual for Teachers of Leaving Certificate Computer Science Page 289