while
loop:
n = 1 while n <= 5: print n n = n + 1 print 'done!'It yields the following output:
1 2 3 4 5 done!How does this work? A
while
statement is followed by
an indented block of code. That block of code is repeated, as
long as the while
-condition is True
.
Step-by-step, the following happens:
n
is 1
1 <= 5
is True
, so
1
, and set n
to 2.
2 <= 5
is True
, so
2
, and set n
to 3.
3 <= 5
is True
, so
3
, and set n
to 4.
4 <= 5
is True
, so
4
, and set n
to 5.
5 <= 5
is True
, so
5
, and set n
to 6.
6 <= 5
is False
, so
done!
n = 1 sum = 0 while n < 11: sum += n n += 1 print sum(notice that I've used a shorthand:
n += 1
is equivalent to n = n + 1
)
The while
-condition checks that n
is
less than 11, so n
will go all the way up to 10,
then the loop will exit.
It's also possible to have one loop inside another:
n = 1 while n <= 4: print 'n =', n x = 1 while x <= 3: print '.... x =', x x += 1 n += 1In the outer loop
n
runs from 1 through 4, and in
the inner loop x
runs from 1 through 3, yielding
this output:
n = 1 .... x = 1 .... x = 2 .... x = 3 n = 2 .... x = 1 .... x = 2 .... x = 3 n = 3 .... x = 1 .... x = 2 .... x = 3 n = 4 .... x = 1 .... x = 2 .... x = 3
for
-loops were invented. Here is an
example:
for n in range(5): print nwhich yields this output:
1 2 3 4The function
range(5)
produces this list of
values: (1 2 3 4)
. This is a list
of int
s, starting at 1, and stopping at one less
than 5.
The statement for n in
list works as
follows: variable n
gets each of the values in the
list. For each value, the indented block of code is executed.
Of course, you can nest one for
loop inside
another:
for i in range(4): print 'i =', i for j in range(3): print '... j =', j for k in range(3): print '------ k =', kThis produces this output:
i = 1 ... j = 1 ------ k = 1 ------ k = 2 ... j = 2 ------ k = 1 ------ k = 2 i = 2 ... j = 1 ------ k = 1 ------ k = 2 ... j = 2 ------ k = 1 ------ k = 2 i = 3 ... j = 1 ------ k = 1 ------ k = 2 ... j = 2 ------ k = 1 ------ k = 2
break
statement. For example, say we're
looking for all multiples of 17, between 100 and 200:
for n in range(100, 201): if n % 17 == 0: print n, 'is a multiple of 17'This will output:
102 is a multiple of 17 119 is a multiple of 17 136 is a multiple of 17 153 is a multiple of 17 170 is a multiple of 17 187 is a multiple of 17But now we decide to stop after the first multiple of 17:
for n in range(100, 201): if n % 17 == 0: print n, 'is a multiple of 17' breakThis will output:
102 is a multiple of 17The
break
statement immediately stops the current
loop, whether it is a while
loop or
a for
loop.
The break
statement interrupts
the nearest enclosing loop. If we have one
loop inside another, a break
inside the inner
loop won't affect the outer loop. Thus, we could consider
the numbers from 100 to 200, and find the first multiple of
2, 3, 5, 7, 11, and 13 among them. To this, we would take
the loop above, and put inside another loop that checks all
these factors.
for factor in (2, 3, 5, 7, 11, 13): for n in range(100, 201): if n % factor == 0: print n, 'is a multiple of', factor breakwhich will output:
100 is a multiple of 2 102 is a multiple of 3 100 is a multiple of 5 105 is a multiple of 7 110 is a multiple of 11 104 is a multiple of 13