Lussen#
Looping for
a while
for
lussen#
for i in [0, 1, 2]:
print("i is", i)
i is 0
i is 1
i is 2
for i in range(0, 3):
print("i is", i)
i is 0
i is 1
i is 2
for x in [10, 15, 2020]:
print("x is", x)
x is 10
x is 15
x is 2020
for i in ...:
print("Gefeliciteerd")
Hoe kan dit 10 keer worden uitgevoerd? Hier is een reeks aan oplossingen mogelijk…
for i in range(10):
print("Gefeliciteerd!")
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Gefeliciteerd!
Iteratief ontwerp#
Lussen! Variabelen!
for
for x in [40, 41, 42]:
print(x)
while
x = 42
while x > 0:
print(x)
x -= 1
Variabelen
x = 41
x += 1
Variabelen#
Variëren!
age = 41
age = age + 1
Wat hetzelfde is als …
age += 1
In het kort#
hwToGo = 7
hwToGo = hwToGo - 1
hwToGo -= 1
total = 21000000
total = total * 2
total *= 2
u235 = 84000000000000000;
u235 = u235 / 2
u235 /= 2
for
!#
for x in [2, 4, 6, 8]:
print("x is", x)
print("Done!")
Stap voor stap#
ken elk element toe aan
x
for x in [2, 4, 6, 8]:
de BODY of BLOCK gebruikt de waarde van
x
en vervolg de lus met de het volgende element
print("x is", x)
code na de lus wordt wordt pas uitgevoerd als de lus klaar is!
print("Done!")
Faculteit met for
#
def fac(n):
result = 1 # not the result yet!
for i in range(1, n + 1): # range start at 0, add one!
result *= i # result = result * i
return result # return the result
fac(5)
120
Quiz#
x = 0
for i in range(4):
x += 10
print(x)
Wat wordt geprint voor x
?
Oplossing#
40
S = "time to think this over! "
result = ""
for i in range(len(S)):
if S[i - 1] == " ":
result += S[i]
print(result)
Wat wordt geprint voor result
?
Oplossing#
'tttto'
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Twee typen for
#
Elementen versus index
Op basis van element#
L = [3, 15, 17, 7]
for x in L:
print(x)
S = "een fijne lus"
for c in S:
print(c)
Op basis van index#
L = [3, 15, 17, 7]
for i in range(len(L)):
print(L[i])
S = "een fijne lus"
for i in range(len(S)):
print(S[i])
Let op, het is niet heel gewoon om in lussen te printen, maar is wel heel nuttig voor debuggen!
Welke van de twee?#
Elementen: eenvoudiger
Indices: flexibeler
Denk aan het “time to think this over! “ voorbeeld, in de lus kon op basis van de index steeds “terug” worden gekeken in de string met S[i - 1]
!
Extreme lussen#
guess = 42
print("It keeps on")
while guess == 42:
print("going and")
print("Phew! I'm done!")
Wat doet deze lus?
while
lussen#
Een lus tot een bepaalde conditie is bereikt.
Tests?
42 == 42
guess > 42
…
Ontsnappen#
import random
guess = 0 # starting value, not the final or desired value!
while guess != 42: # test to see if we keep looping
print('Help! Let me out!')
guess = random.choice([41, 42, 43]) # watch out for infinite loops!
print('At last!') # after the loop ends
Help! Let me out!
Help! Let me out!
At last!
Simulatie#
def guess(hidden):
"""De computer raadt een geheim getal
"""
comp_guess = choice(list(range(100))) # [0, ..., 99]
print("Ik koos", comp_guess) # print de keus
time.sleep(0.5) # pauzeer een halve seconde
if comp_guess == hidden: # base case, eindelijk...
print("Gevonden!") # de computer is blij :)
return 1 # poging
else: # recursive case
return 1 + guess(hidden) # volgende poging!
from random import choice
def escape(hidden):
guess = 0
count = 0
while guess != hidden:
guess = choice(range(100))
count += 1
return count
LC = [escape(42) for i in range(1000)]
Bekijk de eerste 10 resutaten
LC[:10]
[50, 165, 19, 65, 20, 15, 102, 24, 534, 139]
Het snelst geraden
min(LC)
1
Het minste geluk
max(LC)
650
Gemiddeld aantal keren
sum(LC)/len(LC)
101.289
Denken in lussen#
for
for x in range(42):
print(x)
while
x = 1
while x < 42:
print(x)
x *= 2
Verschillen#
Wat zijn de verschillen in ontwerp tussen deze twee Python lussen?
for
— eindige herhaling
Voor een bestaande list of bekend aantal herhalingen
while
— oneindige herhaling
Voor een onbekend aantal herhalingen