Looping

But first, a quick digression on abbreviating expressions like:  a = a + 1.  In Python and many other languages, it can be abbreviated:  a += 1.  Note: there must be no space between the + and the =.
This abbreviation can be applied to the other 3 arithmetic operators as well:
a += 15  →  a = a + 15
a -= 8   →  a = a - 8
a *= 3   →  a = a * 3
a /= 12.5  →  a = a / 12.5

But second, another digression on the function range()...
Remember slicing?  The 1, 2, or 3 arguments given to range() work the same way...
print(list(range(5))) [0, 1, 2, 3, 4]
print(list(range(2,5))) [2, 3, 4]
print(list(range(1,7,2))) [1, 3, 5]
print(list(range(10,0,-3))) [10, 7, 4, 1]

Looping with while

Printing using while
1
2
3
i = 1
while i <= 3:
   print(i)
   i += 1
Print the values of a list: L = [5,1,18]
i = 0
while i < 3:
  print(L[i])
  i += 1
A function designed to print the values of a list def printlist(Q):
  i = 0
  while i < len(Q):
    print(Q[i])
    i += 1
Print a list backwards def printtsil(Q):
  i = len(Q)-1
  while i >= 0:
    print(Q[i])
    i -= 1
Print the characters of a string def printstring(S):
  i = 0
  while i < len(S):
    print(S[i])
    i += 1
Add up all the even numbers from 2 to 10 answer = 0
n = 2
while n <= 10:
  answer += n
  n += 2
break:  This command will exit the body of a loop immediately,
going on to the statements after the end of the loop.

Adding up all the number from 1 onwards until the first
   number that is divisible by both 3 and 5

# Way 1:
answer = 0
i = 1
while i < 15:
  answer += i
  i += 1
print(answer)

# way 2, using break and
#   an "infinite loop" (usually dangerous)
answer = 0
i = 1
while True:
  if i%3 == 0 and i%5 == 0:
    break
  answer += i
  i += 1
print(answer)


Looping with for

Printing using for
1
2
3
for i in range(1,4):
  print(i)

# range(start,end,skip):
#  begin iteration with start,
#  go up to but not including end, skip by skip
Print the values of a list Q = [2, 'hi', True]
for i in range(len(Q)):
  print(Q[i])
A function to print the values of a list or string def printSequence(list_or_string):
  for i in range(len(list_or_string)):
    print(list_or_string[i])
...but here's an easier way: def printSequence(list_or_string):
  for fred in list_or_string:
    print(fred)
...or backwards: def printBack(l_or_s):
  for i in range(len(l_or_s)-1::-1):
    print(l_or_s[i])
... or backwards, an easier way: def printBack(l_or_s):
  for fred in l_or_s[::-1]:
    print(fred)
Print some elements in interesting positions... for i in [2,5,-1,10]:
  print(Q[i])
Print every other character in a string
or every other element in a list
def printAlternates(l_or_s):
  for i in range(0,len(l_or_s),2):
    print(l_or_s[i])

def printAlternates(l_or_s):
  for fred in l_or_s[::2]:
    print(fred)
add up the numbers from 1 to 15: answer = 0
for i in range(1,16):
  answer += i
add up the numbers from 1 to ??
but stop when the total gets just above 100
answer = 0
for i in range(1,100000):
  answer += i
  if answer > 100:
    break