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#

  1. ken elk element toe aan x

for x in [2, 4, 6, 8]:
  1. de BODY of BLOCK gebruikt de waarde van x

  2. en vervolg de lus met de het volgende element

    print("x is", x)
  1. 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'

result

S[i - 1]

S[i]

i

't'

' '

't'

0

't'

'i'

1

'i'

'm'

2

'm'

'e'

3

'e'

' '

4

'tt'

' '

't'

5

't'

'o'

6

'o'

' '

7

'ttt'

' '

't'

8

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!

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

continue en break#

De instructie break zal een lus meteen laten stoppen en het programma gaat verder onder de lus.

De instructie continue gaat naar het einde van de lus en indien nodig wordt de lus herhaald.

Opdracht 1#

a. Wat is de output?

def fun1B():
    for i in range(1, 6):
        if i % 2 == 0:
            print("i is", i)
            return
fun1B()
# controleer jouw antwoord

b. Wat is de output?

def fun2B():
    for i in range(1, 6):
        if i % 2 == 0:
            print("i is", i)
        return
fun2B()
# controleer jouw antwoord

c. Wat is de output?

 def fun3B():
    for i in range(1,6):
        if i % 2 == 0:
            print("i is", i)
    return
fun3B()
# controleer jouw antwoord

d. Wat is de output?

def fun4B():
    for i in range(1,6):
        if i % 2 == 0:
            print("i is", i)
return
fun4B()
# controleer jouw antwoord

Opdracht 2#

Wat is de output van het volgende programma?

def function(L):
    result = []
    for e in L:
        if e < 5:
            result +=  [e]
    return result

print(function([1, 2, 3, 4, 5, 6]))
# controleer jouw antwoord

Opdracht 3#

Schrijf een functie factors(n) die:

  • Een integer ‘n’ accepteert

  • Een lijst teruggeeft met alle factoren van ‘n’

  • Gebruik hiervoor een lus

  • Let goed op hoe in de vorige opgave result werd gebruikt, dit idee kan je ook hier gebruiken.

Tip

De modulo-operator (%) kan hier heel handig zijn!

Vergeet niet de functie voldoende te testen, bijvoorbeeld:

assert factors(12) == [1, 2, 3, 4, 6, 12]
assert factors(15) == [1, 3, 5, 15]
# jouw oplossing

Opdracht 4#

Wat is de output van het volgende programma?

def function(s):
    result = ''
    for c in s:
        result = c + result
    return result

print(function("Hanze"))
# controleer jouw antwoord

Opdracht 5#

Schrijf een functie count_vowels(s) die:

  • Een string ‘s’ accepteert

  • De functie telt alle klinkers in de string en geeft het resultaat terug als integer.

  • Gebruik een lus voor het tellen van de klinkers

  • Let goed op hoe in de vorige opgave result werd gebruikt, dit idee kan je ook hier gebruiken.

Maak zelf een aantal assertions om je functie te testen.

# jouw oplossing