Presentation is loading. Please wait.

Presentation is loading. Please wait.

EECS 110: Lec 11: Indefinite Loops and Program Design Aleksandar Kuzmanovic Northwestern University

Similar presentations


Presentation on theme: "EECS 110: Lec 11: Indefinite Loops and Program Design Aleksandar Kuzmanovic Northwestern University"— Presentation transcript:

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


Download ppt "EECS 110: Lec 11: Indefinite Loops and Program Design Aleksandar Kuzmanovic Northwestern University"

Similar presentations


Ads by Google