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://cs.northwestern.edu/~akuzma/classes/EECS110-s09/

2 Final Exam When: –Wednesday 6/3/09 Where: –Ann. Hall G15 Time: –10AM – 11:30AM

3 Input and typing trouble! print 'Please input a number of meters' meters = raw_input() # get input from user cm = meters * 100 # convert to centimeters print 'That is', cm, 'cm.' # print out the result

4 Input and typing trouble! print 'Please input a number of meters' meters = raw_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 ?!?

5 Fix #1: use a type converter print 'Please input a number of meters' meters = int(raw_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

6 Fix #1: use a type converter print 'Please input a number of meters' meters = int(raw_input()) # get int input from user cm = meters * 100 print 'That is', cm, 'cm.' print 'Please input a number of meters' meters = float(raw_input()) # get float input from user cm = meters * 100 print 'That is', cm, 'cm.' str converts to string type

7 Fix #2: use input() print 'Please input a number of meters' meters = input() # get processed input from user cm = meters * 100 print 'That is', cm, 'cm.' Why not ALWAYS use input() ?

8 Fix #2: use input() print 'Please input a number of meters' meters = input() # get processed input from user cm = meters * 100 print 'That is', cm, 'cm.' Why not ALWAYS use input() ? raw_input always returns input as a string! input processes the input as if typed into Python both allow you to input a prompt string

9 input vs. raw_input reply = raw_input( 'Enter a string and I\'ll tell you what I see.' ) for c in reply: print 'I see a(n) ', c interprets what the user types as a string of characters reply = input( 'Enter any list and I\'ll tell you what I see.' ) for c in reply: print 'I see a(n) ', c processes what the user types just as python would

10 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 ?

11 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 ?

12 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

13 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 ?

14 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

15 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 ? 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

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(1,len(s)): if s[i] == 'a' and s[i-1] == 't': N = N + 1 print 'N is', N

18 Loopy thinking s ='gattacaaggtaaaatgca' 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ?

19 Loopy thinking s ='gattacaaggtaaaatgca‘ - Len of current run - Len of best run 0123456789 101112131415161718 How could we find the longest sequence of 'a' s ?

20 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

21 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…

22 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…

23 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

24 Loops forwhile definite iteration indefinite iteration For a known number of iterations For an unknown number of iterations

25 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

26 def menu(): while True: print "I see danger in your future..." printMenu() choice = 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

27 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

28 def menu(): choice = 1 while choice != 9: printMenu() choice = 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

29 if vs elif def menu(): choice = 1 while choice != 9: printMenu() choice = 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?

30 Indefinite Loops + input def menu(): choice = 1 L = [] while choice != 9: printMenu() choice = 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

31 Gimme another break def menu(): choice = 1 L = [] while True: printMenu() choice = 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!"

32 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.

33 Step 1: Identify Information To Store What information does this program need to keep track of?

34 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

35 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

36 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

37 Step 2: Break Down Functionality What are the things that this program needs to do?

38 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)

39 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 = input( "Which item would you like to buy? ") number = 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!"

40 "Quiz" part 1: Print Items >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite

41 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 = input( "Which item would you like to buy? ") number = 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!"

42 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 0: print "You have spent $", money printItems( items ) choice = input( "Which item would you like to buy? ") number = 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!" Magic numbers!

43 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 = input( "Which item would you like to buy? ") number = 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!"

44 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 = input( "Which item would you like to buy? ") number = 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

45 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

46 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 = input( "Which item would you like to buy? ") number = 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]

47 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)

48 >>> 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

49 "Quiz" part 1: Print Items >>> items = [“coke”, “pepsi”, “sprite”] >>> printItems(items) 0 : coke 1 : pepsi 2 : sprite

50 "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]

51 "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]

52 >>> 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

53 >>> 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