## Python Loops

### Lets get loopy!

#### For loops

Some simple looping techniques without going too much into everything. First we need something to play with. How about a list of things?

``things = ['SpongeBob SquarePants', 'Patrick Star', 'Gary the Snail', 1, 2, 3]``

Now start the looping...

``````for thing in things:
print(thing)``````

Which will print each item in the list on a new line. If, for some reason, you'd like to loop over the individual letters in these strings you can.

``````for thing in things:
for thingy in thing:
print(thingy)``````

Which spews out this (a bit pointless for now but you get the idea).

``````S
p
o
n
g
e
B
o
b

S
q
u
...``````

Notice that there are 3 integers at the end of the list. Hunt them down.

``````integers = []

for thing in things:
if isinstance(thing, int):
integers.append(thing)

print(integers)``````

We can use `range()` to choose how many times to iterate over the loop. Let's use this and our new list to create another pointless list of integers rounded to 1 decimal place.

``````pointless = []
counter = 0

for integer in integers:
for x in range(integer):
silly = round(counter + (x * 3.14), 1)
pointless.append(silly)
counter += 1

print(pointless)``````

To be honest.... If we wanted a list of random integers it'll be much easier just to generate some and use `range` again to choose how many.

``````from random import randint

data = []

for i in range(8):
x = randint(0, 9999999)
data.append(x)

print(data)``````

Which gives us this glorious list of beautiful integers.

``[2204750, 5804939, 7561118, 5774771, 8124467, 332380, 2428940, 3355867]``

#### While loops

We also have `while` loops. We can use conditions with these.

``````from time import sleep

counter = 0

while counter < 10:
counter += 1
print(counter)
sleep(0.2)``````

An endless loop goes a little something like this (press Ctrl + C to stop it).

``````from time import sleep

counter = 0

while True:
counter += 1
print(counter)
sleep(0.2)``````

#### Iterate over dictionaries

First we'll build a dictionary. We'll throw in the glorious list we generated earlier also.

``````data = {
'name': 'Bob',
'age': 20,
'hobby': 'laughing',
'integers': [2204750, 5804939, 7561118, 5774771, 8124467, 332380, 2428940, 3355867]
}``````

And now we'll go through it and as we know `'integers'` is a list we can iterate over that when it gets to it.

``````for key, value in data.items():
if key == 'integers':
print(key)
for x in value:
print(x)
else:
print(key, value)``````

We can target individual values very easily.

``````print(data['name'])

for x in data['integers']:
print(x)``````

And just for fun we'll find the difference between the integers as we loop through them.

``````d = []
gap = 0

for x in data['integers']:
d.append(x - gap)
gap = x

print(d)``````