Object-Oriented Programming in PythonGoldwasser and Letscher
Chapter 4Elementary Control Structures
Terry ScottUniversity of Northern Colorado
2007 Prentice Hall
2
Introduction: Chapter 4 Topics
• Flow of control– for loop statement– if statement– list comprehension
• Case Study: DNA to RNA Transcription
• Case Study: Drawing a Pyramid
• Chapter 5 continues with other flow of control statements
3
For Loopfor i in sequence: <body of loop>
• i is called the loop variable.• sequence can be any sequence of values:
– list. – str.– tuple.– range command.
• body of loop – instructions that are executed by the loop. Must be indented.
4
For Loop
5
For Loop Example (animated)
#for loop printing a sequenceguests = ['Carol', 'Alice', 'Bob']for person in guests: print person=================================
CarolAliceBob
6
For Loop Another Example (animated)
#Another way to do this (previous code is better)
guests = ['Carol', 'Alice', 'Bob']
for i in range(len(guests)):
print i, guests[i]
=================================
0 Carol
1 Alice
2 Bob
7
For Loop Diagram for Previous Slide
8
For Loop Bank Transactions (animated)
transactions = [200, -50, 100]balance = 0for entry in transactions:
print balancebalance = balance + entry
print 'Your balance is', balance===================================0200150250Your balance is 250
9
For Loop Diagrams for Previous Slide
10
Index-Based Loops
for count in range(10,0,-1):
print count,
print 'Blastoff!'
=================================
#output below
10 9 8 7 6 5 4 3 2 1 Blastoff!
11
Index-Based Loops (continued)
#position starts at 0. add 1 to position to have it start at 1
groceries = ['milk', 'cheese', 'bread', 'cereal']
for position in range(len(groceries)):
label = str(1 + position) + '. '
print label + groceries[position]
========================================
1. milk
2. cheese
3. bread
4. cereal
12
Flawed Attempt at Making Names in a List Lower Case
guests = ['Carol', 'Alice', 'Bob']
for person in guests
person = person.lower()
• The problem is once a name is made lower case it is not put back in list.
• See diagram on next slide.
13
For Loop Assignments
14
Solution to Previous Problem with Lower Case
• Use an indexed loop.• Notice the lower case name is assigned
back to the list.
guests = ['Carol', 'Alice', 'Bob']for i in range(len(guests)):
guests[i] = guests[i].lower()
15
Nested Loops
# code prints out chapters 1 and 2 each with # sections a – d and then Appendix. Output # on next slide.for chapter in '12': print 'Chapter ' + chapter for section in 'abcd': print ' Section ' + sectionprint 'Appendix'
16
Nested Loop Output
Chapter 1 Section a Section b Section c Section dChapter 2 Section a Section b Section c Section dAppendix
17
DNA to RNA Transcription
DNA RNA
A U
C G
G C
T A
18
Case Study: DNA to RNA Transcription
#Uses two coordinated lists. Look up base in DNA list.#Use that index to obtain comparable RNA basednaCodes = 'ACGT'rnaCodes = 'UGCA'dna = raw_input('Enter a DNA sequence: ')rnaList = []for base in dna: whichPair = dnaCodes.index(base) rnaLetter = rnaCodes[whichPair] rnaList.append(rnaLetter)rna = ''.join(rnaList)print 'Transcribed into RNA:', rna
19
Drawing a Pyramid: Using Rectangles and Squares
20
Drawing Pyramid with Rectanglesfrom cs1graphics import *numLevels = 8unitSize = 12screenSize = unitSize * (numLevels + 1)paper = Canvas(screenSize, screenSize)centerX = screenSize/2.0for level in range(numLevels): #create top to bottom levels.
width = (level + 1)* unitSizeblock = Rectangle(width, unitSize)centerY = (level + 1) * unitSize
block.move(centerX, centerY)block.setFillColor('grey')paper.add(block)
21
Pyramid Made of Squares
from cs1graphics import *numLevels = 8unitSize = 12screenSize = unitSize * (numLevels + 1)paper = Canvas(screenSize, screenSize)centerX = screenSize/2.0#create levels from top to bottomfor level in range(numLevels):
centerY = (level + 1) * unitSizeleftmostX=centerX-unitSize+level/2.0
22
Pyramid Made of Squares (continued)
#nested for loop – inside previous for
for blockCount in range(level + 1):
block = Square(unitSize)block.move(leftmostX+unitSize*
blockCount.centerY)
block.setFillColor('grey')
paper.add(block)
23
Conditional Statement
24
If Statement Flow Chart
if condition:
body
25
Animated If
x = 3
if x == 3:
x = 2 * x
print x
=================================
6
26
Animated If Continued
x = 4
if x == 3:
x = 2 * x
print x
=================================
3
27
If-Else Statement
28
If-Else Flow Chart
if condition:
body1
else:
body2
29
Animated If-Else
x = 3
if x < 3:
print 'x less than 3'
else:
print x, 'greater than or equal to 3'
================================
3 greater than or equal to 3
30
Conditional Statements (continued)
If condition1:
body1
elif condition2:
body2
else:
body3
31
Flowchart for If – elif - else
32
Counting DNA Bases Using Conditional Statements
numA = numC = numG = numT = 0for base in dna: if base == 'A':
numA += 1else:
if base == 'C': numC += 1else: if base == 'G': numG += 1 else: numT += 1
33
Counting DNA Bases Using Conditional Statements: Better Way
(elif is else and if combined)
numA = numC = numG = numT = 0for base in dna: if base == 'A':
numA += 1elif base == 'C':
numC += 1elif base == 'G':
numG += 1else:
numT += 1
34
List Comprehension
auxiliary = []
for person in guests:
auxiliary.append(person.lower())
# List comprehension is a shorter way to write
# this:
auxiliary = [person.lower() for person in guests]