Download presentation
Presentation is loading. Please wait.
Published byCassandra Norris Modified over 8 years ago
1
EECS 110: Lec 11: Indefinite Loops and Program Design Aleksandar Kuzmanovic Northwestern University http://networks.cs.northwestern.edu/EECS110-s15/
2
Final Exam When: –Wednesday 6/3/14 Where: –Tech L361 Time: –9:00AM – 11:00AM
3
Python and images for creating and saving images import bmp.py image = BitMap( 300, 200, Color.GREEN ) creates a bitmap object and names it image
4
Python and images for creating and saving images import bmp.py image = BitMap( 300, 200, Color.GREEN ) creates a bitmap object and names it image objects are software abstractions containing structured information
5
Python and images and objects import bmp.py image = BitMap( 300, 200, Color.GREEN ) here, a bitmap object named image is calling an internal method named saveFile objects are variables that can contain their own functions, often called methods image.saveFile( "test.bmp" )
6
Python and images and objects import bmp.py image = BitMap( 300, 200, Color.GREEN ) two more internal methods objects are variables that can contain their own functions, often called methods image.saveFile( "test.bmp" ) image.plotPixel( 150, 100 ) image.setPenColor( Color.Red )
7
Q: What does this plot? from bmp import * def test(): """ image demonstration """ width = 200 height = 200 image = BitMap( width, height ) # a 2d loop over each pixel for col in range(width): for row in range(height): if col == row: image.plotPoint( col, row ) image.saveFile( "test.bmp" )
8
Q: What does this plot? A: A diagonal in the SW -> NE direction from bmp import * def test(): """ image demonstration """ width = 200 height = 200 image = BitMap( width, height ) # a 2d loop over each pixel for col in range(width): for row in range(height): if col == row: image.plotPoint( col, row ) image.saveFile( "test.bmp" )
9
How could you change this code so that it plots a diagonal from NW to SE? def test(): """ demonstrating images """ width = 200 height = 200 image = BitMap( width, height ) # a 2d loop over each pixel for col in range(width): for row in range(height): if col == row: image.plotPoint( col, row ) image.saveFile( "test.bmp" )
10
How could you change this code so that it plots a diagonal from NW to SE? def test(): """ demonstrating images """ width = 200 height = 200 image = BitMap( width, height ) # a 2d loop over each pixel for col in range(width): for row in range(height): if col == height – row -1: image.plotPoint( col, row ) image.saveFile( "test.bmp" )
11
Input and typing trouble! print('Please input a number of meters’) meters = input() # get input from user cm = meters * 100 # convert to centimeters print('That is', cm, 'cm.’) # print out the result
12
Input and typing trouble! print('Please input a number of meters') meters = input() # get input from user cm = meters * 100 # convert to centimeters print('That is', cm, 'cm.’) # print out the result >>> Please input a number of meters 5 That is 5555555555555555555555555555555555555555555555555555555 555555555555555555555555555555555555555555555 cm. What is python thinking ?!?
13
Fix #1: use a type converter print('Please input a number of meters’) meters = int(input()) cm = meters * 100 print('That is', cm, 'cm.') check out my newly installed int converter! The type of variable (box) matters! name: meters type: int name: cm type: int 1 100
14
Fix #1: use a type converter print('Please input a number of meters') meters = int(input()) # get int input from user cm = meters * 100 print('That is', cm, 'cm.') print('Please input a number of meters') meters = float(input()) # get float input from user cm = meters * 100 print('That is', cm, 'cm.') str converts to string type
15
More with Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ?
16
Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ?
17
Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ? s = 'gattacaaggtaaaatgca' N = 0 for i in range(0,len(s)): if s[i] == 'a': N = N + 1 print('N is', N)
18
Loopy thinking s = 'gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ?
19
Loopy thinking s = 'gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ? s = 'gattacaaggtaaaatgca' N = 0 for i in range(0,len(s)): if s[i] == 'a' or s[i] == 't': N = N + 1 print('N is', N)
20
Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ?
21
Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ? s = 'gattacaaggtaaaatgca' N = 0 for i in range(1,len(s)): if s[i] == 'a' and s[i-1] == 't': N = N + 1 print('N is', N)
22
Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ? How could we find the number of 'a' s ? How about 'a' s or 't' s? How could we find the number of 'ta' s ? s = 'gattacaaggtaaaatgca' N = 0 for i in range(1,len(s)): if s[i] == 'a' and s[i-1] == 't': N = N + 1 print('N is', N)
23
Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ?
24
Loopy thinking s ='gattacaaggtaaaatgca‘ - Len of current run - Len of best run 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ?
25
Planning in "pseudocode" s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 Loop through the string: if we do see an 'a' if the PREVIOUS letter is NOT an 'a' if the PREVIOUS letter IS an 'a' Keep track of CurRun, MaxRun
26
Planning in "pseudocode" s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 Loop through the string: if we do see an 'a' if the PREVIOUS letter is NOT an 'a' if the PREVIOUS letter IS an 'a' Keep track of CurRun, MaxRun Start a Run! CurRun = 1 Continue our run! CurRun = CurRun + 1 Check for a new maximum…
27
Planning in "pseudocode" s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 MAX = 0 cur = 0 for i in range(0,len(s)): if s[i] == 'a': if s[i-1] != 'a': cur = 1 else: cur = cur + 1 if cur > MAX: MAX = cur print('Max is', MAX) Loop through the string: if we do see an 'a' if the PREVIOUS letter is NOT an 'a' if the PREVIOUS letter IS an 'a' Keep track of CurRun, MaxRun Start a Run! Continue our run! Check for a new maximum…
28
s = 'gattacaaggtaaaatgca' N = 0 for i in range(0,len(s)): if s[i] == 'a': N = N + 1 print('N is', N) s = 'gattacaaggtaaaatgca' N = 0 for i in range(1,len(s)): if s[i] == 'a' and s[i-1] == 't': N = N + 1 print('N is', N) s = 'gattacaaggtaaaatgca' MAX = 0 cur = 0 for i in range(0,len(s)): if s[i] == 'a': if s[i-1] != 'a': cur = 1 else: cur = cur + 1 if cur > MAX: MAX = cur print 'Max is', MAX) s = 'gattacaaggtaaaatgca' N = 0 for i in range(0,len(s)): if s[i] == 'a' or s[i] == 't': N = N + 1 print('N is', N) 1 2 3 4 Summary
29
Loops forwhile definite iteration indefinite iteration For a known number of iterations For an unknown number of iterations
30
def menu(): choice = 1 # Anything except 9 while choice != 9: print("I see danger in your future...") printMenu() choice = input("Make your choice ") print("The inner eye can see no more") def printMenu(): print("What would you like to do?") print("\t 0: See another prediction") print("\t 9: Quit") Seeing into the future… " \t " represents a tab
31
def menu(): while True: print("I see danger in your future...”) printMenu() choice = int(input("Make your choice ")) if choice == 9: break print("The inner eye can see no more") def printMenu(): print("What would you like to do?") print("\t 0: See another prediction") print("\t 9: Quit") Gimme a break break stops the execution of the current loop I'll figure out later how to get out of this loop! OK – I'll stop the loop now and continue with the code after the loop
32
Indefinite Loops + input A problem this week ask you to repeatedly interact with the user (TTSecurities) What would you like to do? 0: Enter a new list 1: Print the current list 2: Find the average 9: Quit Please enter your choice The user's choice controls what happens
33
def menu(): choice = 1 while choice != 9: printMenu() choice = int(input("Please enter your choice ")) if choice == 0: print("You chose to enter a new list”) elif choice == 1: print("You chose to print the list") elif choice == 2: print("You chose to find this average of the list") elif choice != 9: print("You made an invalid choice") print("Goodbye!") def printMenu(): print("What would you like to do?") print("\t 0: Enter a new list") print("\t 1: Print the current list") print("\t 2: Find the average") print("\t 9: Quit") Indefinite Loops + input
34
if vs elif def menu(): choice = 1 while choice != 9: printMenu() choice = int(input("Please enter your choice ")) if choice == 0: print("You chose to enter a new list") if choice == 1: print("You chose to print the list") if choice == 2: print("You chose to find this average of the list") if choice != 9: print("You made an invalid choice") print("Goodbye!”) What happens if we change the elif s to if s?
35
Indefinite Loops + input def menu(): choice = 1 L = [] while choice != 9: printMenu() choice = int(input("Please enter your choice ")) if choice == 0: L = getNewList() elif choice == 1: printList(L) elif choice == 2: averageList(L) elif choice != 9: print("You made an invalid choice") print("Goodbye!") def getNewList(): print("You chose to get a new list") return [] Making a function for each choice makes the code cleaner and easier to modify
36
Gimme another break def menu(): choice = 1 L = [] while True: printMenu() choice = int(input("Please enter your choice ")) if choice == 0: L = getNewList() elif choice == 1: printList(L) elif choice == 2: averageList(L) elif choice == 9: break else: print("You made an invalid choice") print("Goodbye!”)
37
The Price Is Right! Goal: Buy from a set of 5 items (as many of each as you want) while spending between $9.25 and $10.00.
38
Step 1: Identify Information To Store What information does this program need to keep track of?
39
Step 1: Identify Information To Store How much has the user spent? float: money Which items are available? list of strings: items How much does each available item cost? list of floats: prices Which item did the user currently choose? int: choice How many of the currently chosen item does the user want? int: number
40
Step 1: Identify Information To Store How much has the user spent? float: money Which items are available? [“coke”, “ramer”] list of strings: items How much does each available item cost? list of floats: prices Which item did the user currently choose? int: choice How many of the currently chosen item does the user want? int: number
41
Step 1: Identify Information To Store How much has the user spent? float: money Which items are available? [“coke”, “ramer”] list of strings: items How much does each available item cost? list of floats: prices [ 0.75, 0.25] Which item did the user currently choose? int: choice How many of the currently chosen item does the user want? int: number
42
Step 2: Break Down Functionality What are the things that this program needs to do?
43
Step 2: Break Down Functionality Control the overall game play Prompt the user to enter a choice and number of items Calculate the total spent Figure out when the game is over Figure out win or lose Print a welcome message Remove the purchased item from the lists (items, prices)
44
Attempt 1 def playTry1(): print("Welcome to the price is right!") print("Your goal is to buy 5 or fewer items (any number of each)") print("and spend between $9.25 and $10") items = ["bleach","coke","ramen","ice cream","super ball"] prices = [1.35,.75,.25, 3.00, 1.75] money = 0.0 while money 0: print("You have spent $", money) printItems( items ) choice = int(input( "Which item would you like to buy? ")) number = int(input( "How many "+items[choice]+" would you like?")) print(items[choice], "is $", prices[choice]) money += prices[choice]*number prices = prices[0:choice] + prices[choice+1:] items = items[0:choice] + items[choice+1:] print("You have spent $", money) if money >= 9.25 and money <= 10.0: print("You win!") else: print("You lose!”)
45
"Quiz" part 1: Print Items >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite
46
Attempt 1 def playTry1(): print("Welcome to the price is right!") print("Your goal is to buy 5 or fewer items (any number of each)") print("and spend between $9.25 and $10") items = ["bleach","coke","ramen","ice cream","super ball"] prices = [1.35,.75,.25, 3.00, 1.75] money = 0.0 while money 0: print("You have spent $", money) printItems( items ) choice = int(input( "Which item would you like to buy? ")) number = int(input( "How many "+items[choice]+" would you like?")) print(items[choice], "is $", prices[choice]) money += prices[choice]*number prices = prices[0:choice] + prices[choice+1:] items = items[0:choice] + items[choice+1:] print("You have spent $", money) if money >= 9.25 and money <= 10.0: print("You win!") else: print("You lose!”)
47
def playTry1(): print("Welcome to the price is right!") print("Your goal is to buy 5 or fewer items (any number of each)") print("and spend between $9.25 and $10") items = ["bleach","coke","ramen","ice cream","super ball"] prices = [1.35,.75,.25, 3.00, 1.75] money = 0.0 while money 0: print("You have spent $", money) printItems( items ) choice = int(input("Which item would you like to buy? ")) number = int(input("How many "+items[choice]+" would you like?")) print(items[choice], "is $", prices[choice]) money += prices[choice]*number prices = prices[0:choice] + prices[choice+1:] items = items[0:choice] + items[choice+1:] print("You have spent $", money) if money >= 9.25 and money <= 10.0: print("You win!") else: print("You lose!”) Attempt 1: Issues Magic numbers!
48
Attempt 1a def playTry1a(): LIMIT_MIN = 9.25 LIMIT_MAX = 10.00 items = ["bleach","coke","ramen","ice cream","super ball"] prices = [1.35,.75,.25, 3.00, 1.75] money = 0.0 print("Welcome to the price is right!") print("Your goal is to buy", len(items), "or fewer items…") print("and spend between $", LIMIT_MIN, "and $", LIMIT_MAX) while money 0: print("You have spent $", money printItems( items ) choice = int(input("Which item would you like to buy? ")) number = int(input("How many "+items[choice]+" would you like?")) print(items[choice], "is $", prices[choice] ) money += prices[choice]*number prices = prices[0:choice] + prices[choice+1:] items = items[0:choice] + items[choice+1:] print("You have spent $", money) if money >= LIMIT_MIN and money <= LIMIT_MAX: print("You win!") else: print("You lose!”)
49
def playTry1a(): LIMIT_MIN = 9.25 LIMIT_MAX = 10.00 items = ["bleach","coke","ramen","ice cream","super ball"] prices = [1.35,.75,.25, 3.00, 1.75] money = 0.0 print("Welcome to the price is right!") print("Your goal is to buy", len(items), "or fewer items…") print("and spend between $", LIMIT_MIN, "and $", LIMIT_MAX) while money 0: print("You have spent $", money) printItems( items ) choice = int(input("Which item would you like to buy? ”)) number = int(input("How many "+items[choice]+" would you like?”)) print(items[choice], "is $", prices[choice] ) money += prices[choice]*number prices = prices[0:choice] + prices[choice+1:] items = items[0:choice] + items[choice+1:] print("You have spent $", money) if money >= LIMIT_MIN and money <= LIMIT_MAX: print("You win!") else: print("You lose!”) Attempt 1a: Issue Functionality is not broken out
50
def playBetter(): """ Play the game """ [items, prices] = initilizeItems() LIMIT_HIGH = 10.00 LIMIT_LOW = 9.25 money = 0.0 printIntro(LIMIT_LOW, LIMIT_HIGH, items) while not allDone(items, LIMIT_LOW, money): print("You have spent $", money) [items, prices, spent] = playRound(items, prices) money += spent winOrLose(money, LIMIT_LOW, LIMIT_HIGH) Each function does one specific thing. It's clear where we go to change aspects of the game. Code is self-commenting. Functions can return more than one thing in a list
51
def playRound(items, prices): """ Play one round of the game Inputs: A list of items and a list of prices Returns: [items, prices, spent] where items is list of items remaining, prices is a list of remaining prices, and spent is the amount spent this round""" print("*********************”) printItems( items ) choice = int(input("Which item would you like to buy? ")) number = int(input("How many " + items[choice] +" would you like? ")) print(items[choice], "is $", prices[choice]) spent = prices[choice]*number prices = prices[0:choice] + prices[choice+1:] items = items[0:choice] + items[choice+1:] return [items, prices, spent]
52
def playBetter(): """ Play the game """ [items, prices] = initilizeItems() LIMIT_HIGH = 10.00 LIMIT_LOW = 9.50 money = 0.0 printIntro(LIMIT_LOW, LIMIT_HIGH, items) while not allDone(items, LIMIT_LOW, money): print("You have spent $", money) [items, prices, spent] = playRound(items, prices) money += spent winOrLose(money, LIMIT_LOW, LIMIT_HIGH) You CAN (and should) modify your code as you go to make it cleaner and better organized. (That is, you don’t have to get it perfect the first time)
53
>>> diff([7, 0, 6, 4]) 1 "Quiz" Print a list of strings with the specified format def diff( L ): Return the min difference between any 2 elements in L You need determine each element's index… Example: You can assume at least 2 elements in the list Only consider unsigned differences. >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite def printItems( items ): Name(s):_______________________________ Hint: use a NESTED loop
54
"Quiz" part 1: Print Items >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite
55
"Quiz" part 1: Print Items >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite def printItems(items): for x in range(len(items)): print(x,”:”,items[x])
56
"Quiz" part 1: Print Items >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0:coke 1:pepsi 2:sprite def printItems(items): for x in range(len(items)): print(str(x)+”:”+items[x])
57
>>> diff([7, 0, 6, 4]) 1 "Quiz" Part 2 def diff( L ): Return the min difference between any 2 elements in L Example: You can assume at least 2 elements in the list Only consider unsigned differences. Hint: use a NESTED loop
58
>>> diff([7, 0, 6, 4]) 1 "Quiz" Part 2 def diff( L ): mindif = abs(L[1] – L[0]) for i in range(len(L)-1): for j in range(i+1,len(L)): d = abs(L[i]-L[j]) if d < mindiff: mindiff = d return mindif Return the min difference between any 2 elements in L Example: You can assume at least 2 elements in the list Only consider unsigned differences. Hint: use a NESTED loop
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.