---
## Learning Objectives
_After this lesson, you will be able to:_
- Use a `for` loop to iterate a list.
- Use `range()` to dynamically generate loops.
- Use a `while` loop to control program flow.
- Use `break` to exit a loop.
---
## Discussion: A Small List
This situation isn't so bad:
```python
visible_colors = ["red", "orange", "yellow", "green", "blue", "violet"]
print(visible_colors[0])
print(visible_colors[1])
print(visible_colors[2])
print(visible_colors[3])
print(visible_colors[4])
print(visible_colors[5])
```
But what would we do if there were 1,000 items in the list to print?
---
## The `for` Loop
The `for` loop always follows this form:
```python
for item in collection:
# Do something with item
```
For example:
```python
visible_colors = ["red", "orange", "yellow", "green", "blue", "violet"]
for each_color in visible_colors:
print(each_color)
```
---
## Knowledge Check: What will this code do?
Think about what the code will do before you actually run it.
---
## We Do: Writing a Loop
Let's write a loop to print names of guests.
First, we need a list.
- Create a local `.py` file named `my_loop.py`.
- Make your list: Declare a variable `my_list` and assign it to a list containing the names of at least five people.
---
## We Do: Write a Loop - Making the Loop
Now, we'll add the loop.
- Skip a line and write the first line of your `for` loop.
- For the variable that holds each item, give it a name that reflects what the item is (e.g. `name` or `person`).
- Inside your loop, add the code to print `"Hello,"` plus the name.
```
"Hello, Felicia!"
"Hello, Srinivas!"
```
---
## We Do: Write a loop to greet people on your guest list
Our guests are definitely VIPs! Let's give them a lavish two-line greeting.
- Inside your loop, add the code to print another sentence of greeting:
```
"Hello, Srinivas!"
"Welcome to the party!"
```
---
## Discussion: Where Else Could We Use a Loop?
A loop prints everything in a collection of items.
- `guest_list = ["Fred", "Cho", "Brandi", "Yuna", "Nanda", "Denise"]`
What, besides a list, could we use a loop on?
_Hint: There are six on this slide!_
---
## Looping Strings
Loops are collections of strings and numbers.
Strings are collections of characters!
---
## What about...Looping For a Specific Number of Iterations?
We have:
```python
guest_list = ["Fred", "Cho", "Brandi", "Yuna", "Nanda", "Denise"]
for guest in guest_list:
print("Hello, " + guest + "!")
```
The loop runs for every item in the list - the length of the collection. Here, it runs 6 times.
What if we don't know how long `guest_list` will be?
Or only want to loop some of it?
## Enter: Range
`range(x)`:
- Automatically generated.
- A list that contains only integers.
- Starts at zero.
- Stops before the number you input.
```python
range(5) # => [0, 1, 2, 3, 4]
```
---
## Looping Over a Range
Let's look at `range` in action:
---
## The While Loop
What about "While the bread isn't brown, keep cooking"?
Python provides two loop types.
`for`:
- You just learned!
- Loops over collections a finite number of times.
`while`:
- You're about to learn!
- When your loop could run an indeterminate number of times.
- Checks if something is `True` _(the bread isn't brown yet)_ and runs until it's set to `False` _(now the bread is brown, so stop)_.
---
## While Loop Syntax
```python
# While is true:
# Run some code
# If you're done, set the to false
# Otherwise, repeat.
a = 0
while a < 10:
print(a)
a += 1
```

---
## While Loop: Be Careful!
Don't _ever_ do:
```python
a = 0
while a < 10:
print(a)
```
And don't ever do:
```python
a = 0
while a < 10:
print(a)
a += 1
```
Your program will run forever!
If your program ever doesn't leave a loop, hit `control-c`.
---
## We Do: Filling a Glass of Water
Create a new local file, `practicing_while.py`.
In it, we'll create:
- A variable for our current glass content.
- Another variable for the total capacity of the glass.
Let's start with this:
```python
glass = 0
glass_capacity = 12
```
Can you start the `while` loop?
---
## We Do: Filling a Glass of Water
Add the loop:
```python
glass = 0
glass_capacity = 12
while glass < glass_capacity:
glass += 1 # Here is where we add more water
```
That's it!
---
## Side Note: Input()
Let's do something more fun.
With a partner, you will write a program that:
- Has a user guess a number.
- Runs until the user guesses.
But first, how do we have users input numbers?
Using `input()`.
```python
user_name = input("Please enter your name:")
# user_name now has what the user typed
print(user_name)
```
Erase the code in your `practicing_while.py` file and put the above. Run it! What happens? Does it work?
---
## You Do: A Guessing Game
Now, get with a partner! Let's write the the game.
Decide who will be driver and who will be navigator. Add this to your existing file.
- Set a variable, `answer` to `"5"` (yes, a string!).
- Prompt the user for a guess and save it in a new variable, `guess`.
- Create a `while` loop, ending when `guess` is equal to `answer`.
- In the `while` loop, prompt the user for a new `guess`.
- After the `while` loop, print "You did it!"
Discuss with your partner: Why do we need to make an initial variable before the loop?
---
## You Do: A Guessing Game (Solution)
```python
answer = "4"
guess = input("Guess what number I'm thinking of (1-10): ")
while guess != answer:
guess = input("Nope, try again: ")
print("You got it!")
```
How'd you do? Questions?
---
## Summary + Q&A
Loops:
- Common, powerful control structures that let us efficiently deal with repetitive tasks.
`for` loops:
- Used to iterate a set number of times over a collection (e.g. list, string, or using `range`).
- `range` use indices, not duplicates, so it lets you modify the collection.
`while` loops:
- Run until a condition is false.
- Used when you don't know how many times you need to iterate.
That was a tough lesson! Any questions?
---
## Additional Reading
- [Learn Python Programming: Loops Video](https://www.youtube.com/watch?v=JkQ0Xeg8LRI)
- [Python: For Loop](https://wiki.python.org/moin/ForLoop)
- [Python: Loops](https://www.tutorialspoint.com/python/python_loops.htm)