If you are selling tickets to an event, you donโt know in advance how many tickets you will sell. You keep selling tickets as long as people come to the door and thereโs room in the hall.
When the baggage crew unloads a plane, they donโt know in advance how many suitcases there are. They just keep unloading while there are bags left in the cargo hold. (Why your suitcase is always the last one is an entirely different problem.)
When you go through the checkout line at the grocery, the clerks donโt know in advance how many items there are. They just keep ringing up items as long as there are more on the conveyor belt.
Letโs implement the last of these in Python, by asking the user for prices and keeping a running total and count of items. When the last item is entered, the program gives the grand total, number of items, and average price. Weโll need these variables:
while moreItems
ask for price
add price to total
add one to count
This pseudocode has no option to set moreItems to False, so it would run forever. In a grocery store, thereโs a little plastic bar that you put after your last item to separate your groceries from those of the person behind you; thatโs how the clerk knows you have no more items. We donโt have a โlittle plastic barโ data type in Python, so weโll do the next best thing: we will use a price of zero to mean โthis is my last item.โ In this program, zero is a sentinel value, a value used to signal the end of the loop. Hereโs the code:
If you enter a negative number, it will be added to the total and count. Modify the code so that negative numbers give an error message instead (but donโt end the loop) Hint: elif is your friend.
If you enter zero the first time you are asked for a price, the loop will end, and the program will try to divide by zero. Use an if/else statement outside the loop to avoid the division by zero and tell the user that you canโt compute an average without data.
While loops do not have a set number of times they will iterate, so they will continue until something breaks the loop. Keep this in mind while coding with while loops.
You can also use a while loop when you want to validate input; when you want to make sure the user has entered valid input for a prompt. Letโs say you want a function that asks a yes-or-no question. In this case, you want to make sure that the person using your program enters either a Y for yes or N for no (in either upper or lower case). Here is a program that uses a while loop to keep asking until it receives a valid answer. As a preview of coming attractions, it uses the upper() method which is described in Sectionย 9.5 to convert a string to upper case. When you run the following code, try typing something other than Y or N to see how the code reacts: