350 likes | 490 Views
Object-Oriented Programming in Python Goldwasser and Letscher Chapter 4 Elementary Control Structures. Terry Scott University of Northern Colorado 2007 Prentice Hall. Introduction: Chapter 4 Topics. Flow of control for loop statement if statement list comprehension
E N D
Object-Oriented Programming in PythonGoldwasser and LetscherChapter 4Elementary Control Structures Terry Scott University of Northern Colorado 2007 Prentice Hall
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
For Loop for 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.
For Loop Example (animated) #for loop printing a sequence guests = ['Carol', 'Alice', 'Bob'] for person in guests: print person ================================= Carol Alice Bob
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
For Loop Bank Transactions (animated) transactions = [200, -50, 100] balance = 0 for entry in transactions: print balance balance = balance + entry print 'Your balance is', balance =================================== 0 200 150 250 Your balance is 250
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!
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
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.
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()
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 ' + section print 'Appendix'
Nested Loop Output Chapter 1 Section a Section b Section c Section d Chapter 2 Section a Section b Section c Section d Appendix
Case Study: DNA to RNA Transcription #Uses two coordinated lists. Look up base in DNA list. #Use that index to obtain comparable RNA base dnaCodes = '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
Drawing Pyramid with Rectangles from cs1graphics import * numLevels = 8 unitSize = 12 screenSize = unitSize * (numLevels + 1) paper = Canvas(screenSize, screenSize) centerX = screenSize/2.0 for level in range(numLevels): #create top to bottom levels. width = (level + 1)* unitSize block = Rectangle(width, unitSize) centerY = (level + 1) * unitSize block.move(centerX, centerY) block.setFillColor('grey') paper.add(block)
Pyramid Made of Squares from cs1graphics import * numLevels = 8 unitSize = 12 screenSize = unitSize * (numLevels + 1) paper = Canvas(screenSize, screenSize) centerX = screenSize/2.0 #create levels from top to bottom for level in range(numLevels): centerY = (level + 1) * unitSize leftmostX=centerX-unitSize+level/2.0
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)
If Statement Flow Chart if condition: body
Animated If x = 3 if x == 3: x = 2 * x print x ================================= 6
Animated If Continued x = 4 if x == 3: x = 2 * x print x ================================= 3
If-Else Flow Chart if condition: body1 else: body2
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
Conditional Statements (continued) If condition1: body1 elif condition2: body2 else: body3
Counting DNA Bases Using Conditional Statements numA = numC = numG = numT = 0 for base in dna: if base == 'A': numA += 1 else: if base == 'C': numC += 1 else: if base == 'G': numG += 1 else: numT += 1
Counting DNA Bases Using Conditional Statements: Better Way (elif is else and if combined) numA = numC = numG = numT = 0 for base in dna: if base == 'A': numA += 1 elif base == 'C': numC += 1 elif base == 'G': numG += 1 else: numT += 1
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]