Download presentation
Presentation is loading. Please wait.
Published byDerrick Greene Modified over 6 years ago
1
EECS 110: Lec 11: Indefinite Loops and Program Design
Aleksandar Kuzmanovic Northwestern University
2
Final Exam When: Where: Time: Wednesday 5/31/17
Pancoe Life Science Pavilion (PLSAUD) Time: 9:30AM – 11:30AM
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 import bmp.py for creating and saving images
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 image.saveFile( "test.bmp" ) objects are variables that can contain their own functions, often called methods
6
Python and images and objects
import bmp.py image = BitMap( 300, 200, Color.GREEN ) image.setPenColor( Color.Red ) two more internal methods image.plotPixel( 150, 100 ) image.saveFile( "test.bmp" ) objects are variables that can contain their own functions, often called methods
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
A: A diagonal in the SW -> NE direction
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 * # 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 * # convert to centimeters print('That is', cm, 'cm.’) # print out the result >>> Please input a number of meters 5 That is 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! 1 100 The type of variable (box) matters! name: meters type: int name: cm type: int
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
s ='gattacaaggtaaaatgca'
More with Loopy thinking s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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 ? How could we find the longest sequence of 'a's ?
16
s ='gattacaaggtaaaatgca'
Loopy thinking s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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 ? How could we find the longest sequence of 'a's ?
17
s ='gattacaaggtaaaatgca'
Loopy thinking s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 s = 'gattacaaggtaaaatgca' N = 0 for i in range(0,len(s)): if s[i] == 'a': N = N + 1 print('N is', N) 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 ? How could we find the longest sequence of 'a's ?
18
s = 'gattacaaggtaaaatgca'
Loopy thinking s = 'gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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 ? How could we find the longest sequence of 'a's ?
19
s = 'gattacaaggtaaaatgca'
Loopy thinking s = 'gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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) 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 ? How could we find the longest sequence of 'a's ?
20
s ='gattacaaggtaaaatgca'
Loopy thinking s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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 ? How could we find the longest sequence of 'a's ?
21
s ='gattacaaggtaaaatgca'
Loopy thinking s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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) 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 ? How could we find the longest sequence of 'a's ?
22
s ='gattacaaggtaaaatgca'
Loopy thinking s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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) 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 ? How could we find the longest sequence of 'a's ?
23
s ='gattacaaggtaaaatgca'
Loopy thinking s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 How could we find the longest sequence of 'a's ?
24
s ='gattacaaggtaaaatgca‘
Loopy thinking s ='gattacaaggtaaaatgca‘ - Len of current run - Len of best run 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 How could we find the longest sequence of 'a's ?
25
s ='gattacaaggtaaaatgca'
Planning in "pseudocode" s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Keep track of CurRun, MaxRun 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'
26
s ='gattacaaggtaaaatgca'
Planning in "pseudocode" s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Keep track of CurRun, MaxRun Loop through the string: if we do see an 'a' if the PREVIOUS letter is NOT an 'a' Start a Run! CurRun = 1 if the PREVIOUS letter IS an 'a' Continue our run! CurRun = CurRun + 1 Check for a new maximum…
27
s ='gattacaaggtaaaatgca'
Planning in "pseudocode" s ='gattacaaggtaaaatgca' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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) Keep track of CurRun, MaxRun Loop through the string: if we do see an 'a' if the PREVIOUS letter is NOT an 'a' Start a Run! if the PREVIOUS letter IS an 'a' Continue our run! Check for a new maximum…
28
Summary 1 2 4 3 s = 'gattacaaggtaaaatgca' N = 0
for i in range(0,len(s)): if s[i] == 'a': N = N + 1 print('N is', N) 2 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) 4 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) 3 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)
29
for while Loops definite iteration indefinite iteration
For a known number of iterations For an unknown number of iterations
30
Seeing into the future…
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") "\t " represents a tab
31
Gimme a break break stops the execution of the current loop
I'll figure out later how to get out of this loop! 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") OK – I'll stop the loop now and continue with the code after the loop break stops the execution of the current 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
Indefinite Loops + input
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")
34
if vs elif What happens if we change the elifs to ifs? 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 elifs to ifs?
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? Money you have spent, how much each item is, Items, # items to buy, limits,
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 Money you have spent, how much each item is, Items, # items to buy, limits,
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 Money you have spent, how much each item is, Items, # items to buy, limits,
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 Money you have spent, how much each item is, Items, # items to buy, limits,
42
Step 2: Break Down Functionality
What are the things that this program needs to do? Allow user to buy one item Ask user how many items to buy Update $$, update item list, check if finished
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) Allow user to buy one item Ask user how many items to buy Update $$, update item list, check if finished
44
ID problems, write on board
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 < 9.25 and len(items) > 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:] if money >= 9.25 and money <= 10.0: print("You win!") else: print("You lose!”) ID problems, write on board
45
"Quiz" part 1: Print Items Allow user to buy one item
>>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite Allow user to buy one item Ask user how many items to buy Update $$, update item list, check if finished
46
ID problems, write on board
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 < 9.25 and len(items) > 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:] if money >= 9.25 and money <= 10.0: print("You win!") else: print("You lose!”) ID problems, write on board
47
ID problems, write on board
Attempt 1: Issues 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 < 9.25 and len(items) > 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:] if money >= 9.25 and money <= 10.0: print("You win!") else: print("You lose!”) ID problems, write on board Magic numbers!
48
ID problems, write on board
Attempt 1a def playTry1a(): LIMIT_MIN = 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 < LIMIT_MIN and len(items) > 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!”) ID problems, write on board
49
ID problems, write on board
Attempt 1a: Issue def playTry1a(): LIMIT_MIN = 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 < LIMIT_MIN and len(items) > 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:] if money >= LIMIT_MIN and money <= LIMIT_MAX: print("You win!") else: print("You lose!”) ID problems, write on board Functionality is not broken out
50
Code is self-commenting.
Each function does one specific thing. It's clear where we go to change aspects of the game. Code is self-commenting. 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) 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
(That is, you don’t have to get it perfect the first time)
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) 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)
53
"Quiz" def diff( L ): def printItems( items ):
Name(s):_______________________________ Return the min difference between any 2 elements in L Example: Print a list of strings with the specified format >>> diff([7, 0, 6, 4]) 1 Example: >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite Only consider unsigned differences. You can assume at least 2 elements in the list Hint: use a NESTED loop def diff( L ): You need determine each element's index… def printItems( items ):
54
"Quiz" part 1: Print Items Allow user to buy one item
>>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite Allow user to buy one item Ask user how many items to buy Update $$, update item list, check if finished
55
"Quiz" part 1: Print Items Allow user to buy one item
>>> 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]) Allow user to buy one item Ask user how many items to buy Update $$, update item list, check if finished
56
"Quiz" part 1: Print Items Allow user to buy one item
>>> 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]) , in print automatically puts blank space + removes blank space Allow user to buy one item Ask user how many items to buy Update $$, update item list, check if finished
57
Return the min difference between any 2 elements in L
"Quiz" Part 2 Return the min difference between any 2 elements in L Example: >>> diff([7, 0, 6, 4]) 1 Only consider unsigned differences. You can assume at least 2 elements in the list Hint: use a NESTED loop def diff( L ):
58
Return the min difference between any 2 elements in L
"Quiz" Part 2 Return the min difference between any 2 elements in L Example: >>> diff([7, 0, 6, 4]) 1 Only consider unsigned differences. You can assume at least 2 elements in the list Hint: use a NESTED loop 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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.