Level 1
Birds & Coconuts
Numbers & Variables
Why Python?
Easy to read
Random color art
jeremykun.com
Fast
Code School User Voice
Versatile
Frets on Fire
fretsonre.sourceforge.net
The Python Interpreter
>>>
This symbol means "write your code here"
This symbol points to the outcome
>>>
30.5
30.5
Mathematical Operators
addition
>>>
3 + 5
subtraction
>>>
multiplication
>>>
3 * 5
division
>>>
15
exponent
>>>
2 ** 3
8
10 - 5
30 / 6
5
negation
>>>
-2 + -3
-5
Integers and Floats
Heres a little Python terminology.
int
>>>
35
35
An int is a
whole number
oat
>>>
30.5
30.5
A float is a
decimal number
Order of Operations
These are the calculations happening rst.
>>>
Behind
the
scenes
( 5 + 7 )
12
* 3
* 3
36
>>>
5 + 7 * 3
5 + 21
26
PEMDAS: Parentheses Exponent Multiplication Division Addition Subtraction
Can a Swallow Carry a Coconut?
Lets use some math to gure out if this swallow can carry this coconut!
What we know: A swallow weighs 60g and can carry 1/3 of its weight.
Swallows weight in grams
>>>
Divide by 3
60 / 3
20
So, 1 swallow can carry 20 grams
but a coconut weighs 1450 grams
How Many Swallows Can Carry a Coconut?
Lets try to gure out how many swallows it takes to carry 1 coconut.
What we know: A swallow weighs 60g and can carry 1/3 of its weight.
Coconut weight
>>>
Swallows weight
Divide by 3
1450 / 60 / 3
8.06
That number seems way too low.
Lets look at what happened behind the scenes:
1450 / 60 / 3
24.17
/ 3
We wanted 60/3 to happen first we can add parentheses to fix this.
Using Correct Order of Operations
How many swallows does it take to carry 1 coconut?
What we know: A swallow weighs 60g and can carry 1/3 of its weight.
Coconut weight
>>>
Swallows weight
Divide by 3
1450 / ( 60 / 3 )
1450 / ( 20 )
72.5
Thats a lot of swallows!
What Other Fruits Can a Swallow Carry?
Lets see if we can get closer to 1 swallow with other fruits.
# swallows per coconut:
>>>
1450 / ( 60 / 3 )
72.5
# swallows per apple:
>>>
128 / ( 60 / 3 )
6.4
# swallows per cherry:
>>>
8 / ( 60 / 3 )
Seems like were
repeating this a lot
0.4
Great!
We found one that
works!
Creating a Variable in Python
Use variables to store a value that can be used later in your program.
>>>
swallow_limit = 60 / 3
variable name
value to store
# swallows per coconut:
>>>
1450 / swallow_limit
# swallows per apple:
>>>
128 / swallow_limit
6.4
# swallows per cherry:
>>>
8 / swallow_limit
0.4
Less repeated calculations
More organized
72.5
Using Variables Assigns Meaning
Variables keep your code more readable and assign meaning to values.
>>>
swallow_limit = 60 / 3
>>>
swallows_per_cherry
num_per_cherry == 8 / swallow_limit
>>>
swallows_per_cherry
0.4
What Should I Name My Variables?
As long as youre not breaking these rules, you can name variables anything you want!
no spaces = 0
3mice, $mice
no spaces in the name
no digits or special characters in front
Pep 8 Style Guide recommends:
swallow_limit
lowercase, use underscores for spaces
Pep 8 Style Guide does NOT recommend:
swallowLimit
camel case, later words are capitalized
Check Pep 8 style guide here - http://go.codeschool.com/pep8-styleguide
Can a Macaw Carry a Coconut?
Step 1: Declare variables for each value and nd out the macaws carrying limit.
>>>
perc = 1/3
>>>
coco_wt = 1450
>>>
macaw_wt = 900
>>>
macaw_limit = macaw_wt * perc
>>>
macaw_limit
300
Notice our variables
are descriptive,
but were still using
abbreviations where
appropriate.
Can a Macaw Carry a Coconut?
Step 2: Divide the coconuts weight by the limit.
# macaws needed to carry a coconut
>>>
perc = 1/3
>>>
coco_wt = 1450
>>>
macaw_wt = 900
>>>
macaw_limit = macaw_wt * perc
>>>
num_macaws = coco_wt/macaw_limit
>>>
num_macaws
4.8
Importing Modules Extra Functionality
Occasionally, we will want to use modules containing functionality that is not built in to
the Python language.
This is importing extra math functions
>>>
import math
>>>
num_macaws = 4.8
>>>
math.ceil(num_macaws)
ceil() is short for ceiling, which rounds up
Check out Python libraries here - http://go.codeschool.com/python-libraries
Can a Macaw Carry a Coconut?
Step 3: Use the ceiling function to round up.
>>>
import math
>>>
perc = 1/3
>>>
coco_wt = 1450
>>>
macaw_wt = 900
>>>
macaw_limit = macaw_wt * perc
>>>
num_macaws = coco_wt/macaw_limit
>>>
math.ceil(num_macaws)
5
Level 2
Spam & Strings
Strings
Creating Strings
Strings are a sequence of characters that can store letters, numbers, or a combination anything!
Create a string with quotes
string
>>>
'Hello World'
'Hello World'
Single or double quotes work
just be consistent
string
>>>
"SPAM83"
'SPAM83'
String Concatenation With +
We can combine (or concatenate) strings by using the + operator.
>>>
first_name = 'Monty'
>>>
last_name = 'Python'
>>>
full_name = first_name + last_name
>>>
full_name
'MontyPython'
Need to add a space!
Concatenating a Space
We can
>>>
first_name = 'Monty'
>>>
last_name = 'Python'
>>>
full_name = first_name + ' ' + last_name
>>>
full_name
'Monty Python'
concatenate a
space character
bet ween the words
Moving Our Code to a Script File
>>>
first_name = 'Monty'
>>>
last_name = 'Python'
>>>
full_name = first_name + ' ' + last_name
>>>
full_name
Instead, we can put all lines into a single script file
script.py
first_name = 'Monty'
last_name = 'Python'
full_name = first_name + ' ' + last_name
But how can we output the value of full_name?
Each line is entered
on the command line
Output From Scripts With print()
Everything in
1 script:
script.py
first_name = 'Monty'
last_name = 'Python'
full_name = first_name + ' ' + last_name
print(full_name)
Prints whatever is
inside the ()
Monty Python
print(first_name, last_name)
Monty Python
print() as many things as you want,
just separate them with commas
print() automatically adds spaces
bet ween arguments
In Python 2,
print doesnt need ()
print full_name
Running a Python Script
script.py
first_name = 'Monty'
last_name = 'Python'
full_name = first_name + ' ' + last_name
print(full_name)
Put the name of your script file here
>>>
python script.py
Monty Python
This is the command to run Python
scripts
Demo: Running a Python Script From the Console
Comments Describe What Were Doing
Lets write a script to describe what Monty Python is.
script.py
# Describe the sketch comedy group
name = 'Monty Python'
description = 'sketch comedy group'
year = 1969
# me ans t his line
i s a c omme
do e s nt ge t
r un
n t and
Concatenating Strings and Ints
When we try to concatenate an int, year, with a string, we get an error.
script.py
# Describe the sketch comedy group
name = 'Monty Python'
description = 'sketch comedy group'
year = 1969
Year is an int,
not a string
# Introduce them
sentence = name + ' is a ' + description + ' formed in ' + year
TypeError: Can't convert 'int' object to str implicitly
Concatenating Strings and Ints
script.py
# Describe the sketch comedy group
name = 'Monty Python'
description = 'sketch comedy group'
year = '1969'
We could add quotes
and make the year a
string instead of an int
# Introduce them
sentence = name + ' is a ' + description + ' formed in ' + year
This will work, but it really makes sense to keep numbers as numbers.
Turning an Int Into a String
script.py
# Describe the sketch comedy group
name = 'Monty Python'
description = 'sketch comedy group'
year = 1969
Instead, convert
the int to a string
when we
concatenate
with str()
# Introduce them
sentence = name + ' is a ' + description + ' formed in ' + str( year)
print(sentence)
Monty Python is a sketch comedy group formed in 1969
print() Casts to String Automatically
script.py
# Describe the sketch comedy group
name = 'Monty Python'
description = 'sketch comedy group'
year = 1969
print() does string
conversions for us
# Introduce them
print(name, 'is a', description, 'formed in', year)
Monty Python is a sketch comedy group formed in 1969
Dealing With Quotes in Strings
script.py
# Describe Monty Python's work
famous_sketch = 'Hell's Grannies'
Interpreter thinks the
quote has ended and
doesnt know what S is
Syntax Error: invalid syntax
script.py
# Describe Monty Python's work
famous_sketch1 = "Hell's Grannies"
print(famous_sketch1)
Hell's Grannies
Start with
''no longer means
''
instead
'
the end of the string
now the '
Special Characters for Formatting
We want to add some more sketches and print them out
script.py
Lets add another
famous sketch
# Describe Monty Python's work
famous_sketch1 = "Hell's Grannies"
famous_sketch2 = 'The Dead Parrot'
print(famous_sketch1, famous_sketch2)
Hell's Grannies The Dead Parrot
This works, but we want to format it better.
Special Characters Newline
\n is a special character that means new line.
script.py
# Describe Monty Python's work
famous_sketch1 = "\nHell's Grannies"
famous_sketch2 = '\nThe Dead Parrot'
print('Famous Work:', famous_sketch1, famous_sketch2)
Famous Work:
Hell's Grannies
The Dead Parrot
This works, but we want to indent the titles.
Add a newline
to make this look better
Special Characters Tab
\t is a special character that means tab.
script.py
# Describe Monty Python's work
famous_sketch1 = "\n\tHell's Grannies"
famous_sketch2 = '\n\tThe Dead Parrot'
print('Famous Work:', famous_sketch1, famous_sketch2)
Famous Work:
Hell's Grannies
The Dead Parrot
Add a tab to indent and
make this look even
better
Strings Behind the Scenes a List of Characters
A string is a list of characters, and each character in this list has a position or an index.
greeting = 'H E L L O
W O R L D !'
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10][11]
Starts at 0
>>>
greeting[0]
'H'
We can get each character by
calling its index with []
>>>
greeting[11]
'!'
>>>
greeting[12]
IndexError: string index out of range
String Built-in Function len()
There are a few built-in string functions like len(), which returns the length of a string and is very useful.
'H E L L O
W O R L D !'
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
script.py
# print the length of greeting
greeting = 'HELLO WORLD!'
print( len(greeting) )
12
12
The Man Who Only Says Ends of Words
Go
od
Ev
en
ing
'G o o d'
'E v e n i n g'
[0] [1] [2] [3]
[0] [1] [2] [3] [4] [5] [6]
script.py
od ning
word1 = 'Good'
end1 = word1[2] + word1[3]
print(end1)
The last half of the word:
characters at positions
[2] and [3]
od
Using Slices to Access Parts of a String
Boundary
ends before
index 5
Boundary
starts before
index 2
word =
"P y t h o n"
[0] [1] [2] [3] [4] [5]
>>>
word[2:5]
Start
boundary
End
boundary
tho
Slice Formula and Shortcuts
slice formula: variable [start : end+1]
Go
Go
od
Go
od
word1 ='G o o d'
od
word1 ='G o o d'
[0] [1] [2] [3]
>>>
Shortcuts:
>>>
word1[0:2]
Go
[0] [1] [2] [3]
>>>
Means from start to position
word1[:2]
Go
word1[2:4]
o
Gd
o
Means from position to end
>>>
word1[2:]
od
Incorporating String Slices Into Our Solution
Go
'G o o d'
'E v e n i n g'
[0] [1] [2] [3]
[0] [1] [2] [3] [4] [5] [6]
script.py
od
od
word1 = 'Good'
end1 = word1[2] + word1[3] word1[2:4]
print(end1)
Replace this with a slice
od
Using the String Slice Shortcut
Go
od
Ev
'G o o d'
'E v e n i n g'
[0] [1] [2] [3]
[0] [1] [2] [3] [4] [5] [6]
script.py
en
ing
word1 = 'Good'
end1 = word1[2:]
od ning
word2 = 'Evening'
end2 = word2[3:]
Improved this with a
shortcut
print(end1, end2)
od ning
It would be great if we didnt have to know the halfway points were at 2 and 3
The Index at the Halfway Point
The len() function will let us calculate the halfway index of our word.
Go
script.py
od
Ev
en
ing
# Calculate the halfway index
word1 = 'Good'
half1 = len(word1)/2
word2 = 'Evening'
half2 = len(word2)/2
half1 is 2.0
half2 is 3.5
PROBLEM: indexes have to be
integers floats wont work!
od ning
'G o o d'
[0] [1] [2] [3]
'E v e n i n g'
[0] [1] [2] [3] [4] [5] [6]
The Index at the Halfway Point
Integer division vs floor
division. Be consistent if
we cover in Level 1.
// 2 division signs means integer division in Python.
'G o o d'
script.py
[0] [1] [2] [3]
# Calculate the halfway index
half1 is
4//2 = 2
word1 = 'Good'
half1 = len(word1)//2
half2 is
7//2 = 3
word2 = 'Evening'
half2 = len(word2)//2
// Means integer division
'E v e n i n g'
[0] [1] [2] [3] [4] [5] [6]
// Also rounds down to the
nearest integer
In Python 2,
single division /
is int division unless
there are floats involved
Making Our Program More Reusable
Calculating the halfway index makes our logic reusable.
script.py
half1 is
4//2 = 2
word1 = 'Good'
half1 = len(word1)//2
end1 = word1[2:]
word1[half1:]
half2 is
7//2 = 3
word2 = 'Evening'
half2 = len(word2)//2
end2 = word2[3:]
word2[half2:]
print(end1, end2)
Go
od
Ev
en
ing
od ning
'G o o d'
[0] [1] [2] [3]
'E v e n i n g'
od ning
[0] [1] [2] [3] [4] [5] [6]
Level 3
Conditional Rules of Engagement
Conditionals & Input
Extended Battle Rules
if there's less than 3 knights
Retreat!
if there's more than 10 knights
Trojan Rabbit!
otherwise
Comparison Operators
There are 6 comparators in Python:
<
<=
less than
equal to
less than
==
equal to
Is 5 less than 10 ??
>>>
5 < 10
5 == 10
greater than
equal to
>
greater than
Is name equal to Jim ??
True
Is 5 equal to 10 ??
>>>
>=
>>>
name = 'Pam'
>>>
name == 'Jim'
!=
not
equal to
Setting the name variable
equal to 'Pam'
False
Is name NOT equal to Jim ??
False
>>>
name != 'Jim'
True
Comparison Operator Outputs
Heres the output of evaluating all 6 comparisons:
>>>
5 < 10
>>>
True
>>>
5 <= 10
True
5 == 10
>>>
False
>>>
5 != 10
True
5 > 10
False
>>>
5 >= 10
False
Booleans
In programming, a boolean is a type that can only be True or False.
booleans
True
False
Capital T and Capital F
>>>
is_raining = True
>>>
is_raining
True
Conditional if, then
An if statement lets us decide what to do: if True, then do this.
script.py
# Battle Rules
num_knights = 2
True
if num_knights < 3:
print('Retreat!')
print('Raise the white flag!')
Any indented code that
comes after an if
statement is called a
code block
Retreat!
Raise the white flag!
If True:
Then do this
Then this
Conditional if, then
An if statement lets us decide what to do: if False, then dont do this.
script.py
# Battle Rules
num_knights = 4
False
if num_knights < 3:
print('Retreat!')
print('Raise the white flag!')
Because the
conditional is False,
this block doesnt run
s
n
e
p
p
a
h
g
n
i
h
t
o
N
*
s
t
e
k
*c r i c
The Program Continues After the Conditional
The code continues to run as usual, line by line, after the conditional block.
script.py
# Battle Rules
num_knights = 4
False
if num_knights < 3:
print('Retreat!')
print('Raise the white flag!')
print('Knights of the Round Table!')
This block doesnt run,
but the code right
outside of the block
still does
Knights of the Round Table!
Always this
Rules for Whitespace in Python
In Python, indent with 4 spaces. However, anything will work as long as youre consistent.
Irregular spacing is
a no-no!
2 spaces
4 spaces
if num_knights == 1:
# Block start
print('Do this')
print('And this')
print('Always this')
IndentationError: unexpected indent
The PEP 8 style guide recommends 4 spaces - http://go.codeschool.com/pep8-styleguide
Extended Battle Rules
if there's less than 3 knights
Retreat!
otherwise
Conditional if False
else
script.py
# Battle Rules
num_knights = 4
if num_knights < 3:
print('Retreat!')
else:
print('Truce?')
Truce?
If this statement is True,
then run the indented code below
Otherwise,
then run the indented code below
Conditionals How to Check Another Condition?
script.py
# Battle Rules
num_knights = 10
if num_knights < 3:
print('Retreat!')
else:
print('Truce?')
Truce?
Otherwise if at least 10,
then Trojan Rabbit
elif Allows Checking Alternatives
script.py
Else sequences
will exit
as soon as a
statement is True
# Battle Rules
num_knights = 10
day = 'Wednesday'
if num_knights < 3:
print('Retreat!')
elif num_knights >= 10:
print('Trojan Rabbit')
and continue
the program after
elif day == 'Tuesday':
print('Taco Night')
else:
print('Truce?')
elif means other wise if
We can have multiple elifs
Trojan Rabbit
Combining Conditionals With and/or
King Arthur has decided:
On all Mondays, we retreat
We can only use the Trojan Rabbit on Wednesday
(were renting it out on other days)
if num_knights < 3:
print('Retreat!')
if num_knights >= 10:
print('Trojan Rabbit!')
OR
AND
if its a Monday
its Wednesday
Retreat!
Trojan Rabbit!
Putting or in Our Program
On all Mondays, or if we have less than 3 knights, we retreat.
If we have less than 3 knights
OR
If its a Monday
if num_knights < 3 or day == "Monday":
print('Retreat!')
Spelled out Monday, and
Wednesday on the next
slide.
Putting and in Our Program
We can only use the Trojan Rabbit if we have at least 10 knights AND its Wednesday.
If we have at least 10 knights
AND
If its a Wednesday
if num_knights >= 10 and day == "Wednesday":
print('Trojan Rabbit!')
Boolean Operators and / or
Make it possible to combine comparisons or booleans.
If 1 is False
and result will be False
If 1 is True
or result will be True
True
and
True
True
True
and
False
False
False
and
False
False
True
or
True
True
True
or
False
True
False
or
False
False
Incorporating the Days of the Week
script.py
# Battle Rules
num_knights = 10
day = 'Wednesday'
if num_knights < 3 or day == 'Monday':
print('Retreat!')
elif num_knights >= 10 and day == 'Wednesday':
print('Trojan Rabbit!')
else:
print('Truce?')
Checking day of the week
User Input With the input() Function
script.py
# Ask the user to input the day of the week
day = input('Enter the day of the week')
day saves the user's input
prints out this statement
and waits for user input
print('You entered:', day)
In Python 2,
raw_input() is used
instead of input()
Receiving User Input From Console
Just like we can print() text to the console, we can also get user input from the console.
script.py
# Ask the user to input the number of knights
num_knights = int(input('Enter the number of knights'))
Change (or cast) the string to an int
User enters #, but it comes in as text
print('You entered:', num_knights)
if num_knights < 3 or day == 'Monday':
print('Retreat!')
Enter the number of knights
You entered: 10
10
User enters 10
Dierent Input and Conditionals Changes Output
script.py
Different user input
causes different
program flow:
# Battle Rules
num_knights = int(input('How many knights?'))
day = input('What day is it?'))
1st run
if num_knights < 3 or day == 'Monday':
print('Retreat!')
elif num_knights >= 10 and day == 'Wednesday':
print('Trojan Rabbit!')
else:
print('Truce?')
2nd run
1st run
How many knights?
What day is it?
Tuesday
Retreat
2nd run
How many knights?
12 2
What day is it?
Wednesday
Trojan Rabbit!
Extended Battle Rules
num_knights < 3
killer bunny
Holy
Hand Grenade
num_knights >= 10
otherwise
Nested Conditionals Ask Follow-up Questions
script.py
# Battle Rules
num_knights = int(input('Enter number of knights')
day = input('Enter day of the week')
enemy = input('Enter type of enemy')
First, find out if our enemy
is the killer bunny
if enemy == 'killer bunny':
print('Holy Hand Grenade!')
else:
Do the original battle rules here
# Original Battle Rules
If not,
then use the
original battle rules
if num_knights < 3 or day == 'Monday':
print('Retreat!')
if num_knights >= 10 and day == 'Wednesday':
print('Trojan Rabbit!')
else:
print('Truce?')
Nested Conditionals
script.py
# Battle Rules
num_knights = int(input('Enter number of knights')
day = input('Enter day of the week')
enemy = input('Enter type of enemy')
if enemy == 'killer bunny':
print('Holy Hand Grenade!')
else:
# Original Battle Rules
if num_knights < 3 or day == 'Monday':
print('Retreat!')
if num_knights >= 10 and day == 'Wednesday':
print('Trojan Rabbit!')
else:
print('Truce?')
Our final
Rules of Engagement