Opstap

Deze pagina bevat uitvoerbare code.

De uitwerkingen staan in dezelfde volgorde als de twaalf opdrachten in problems/5_opstap.

Opdracht 1

De binnenste lus draait drie keer voor elke ronde van de buitenste lus: harry verschijnt negen keer.

name = "harry"
for x in range(3):
    for x in range(3):
        print(name)
harry
harry
harry
harry
harry
harry
harry
harry
harry

Opdracht 2

De binnenste lus loopt drie keer langs lst, voor elk van de drie rondes van de buitenste lus.

lst = [1, 2, 3]
for ix1 in range(3):
    for ix2 in lst:
        print(ix2)
1
2
3
1
2
3
1
2
3

Opdracht 3

De uitvoer loopt eerst door de eerste rij en daarna door de tweede rij.

nested_lst = [[1, 2, 3], [9, 8, 7]]
for ix1 in nested_lst:
    for ix2 in ix1:
        print(ix2)
1
2
3
9
8
7

Opdracht 4

Deze versie gebruikt indices en heeft dezelfde uitvoer als opdracht 3: 1, 2, 3, 9, 8, 7.

nested_lst = [[1, 2, 3], [9, 8, 7]]
for ix1 in range(len(nested_lst)):
    for ix2 in range(len(nested_lst[ix1])):
        print(nested_lst[ix1][ix2])
1
2
3
9
8
7

Opdracht 5

De eerste print geeft [[40, 50], [800, 900]]. grid[2][0] leest het eerste element van de derde rij en de tweede print geeft daarom 1.

grid = [[4, 5], [8, 9], [1, 2]]
k = 1
new_grid = []
for i in range(2):
    k = k * 10
    new_row = []
    for j in range(2):
        new_row = new_row + [grid[i][j] * k]
    new_grid = new_grid + [new_row]
print(new_grid)
print(grid[2][0])
[[40, 50], [800, 900]]
1

Opdracht 6

De uitvoer is 0, daarna 0 en 2, daarna 0, 3, 6, en ten slotte 0, 4, 8, 12.

for i in range(5):
    for j in range(i):
        print(i * j)
0
0
2
0
3
6
0
4
8
12

Opdracht 7

De eerste regel is leeg; daarna verschijnen *, **, *** en ****.

n = 5
for i in range(n):
    for j in range(i):
        print("*", end="")
    print("")
*
**
***
****

Opdracht 8

Na de oplopende driehoek volgt een regel met vijf tekens, daarna vier, drie, twee en één.

n = 5
for i in range(n):
    for j in range(i):
        print("*", end="")
    print("")
for i in range(n, 0, -1):
    for j in range(i):
        print("*", end="")
    print("")
*
**
***
****
*****
****
***
**
*

Opdracht 9

row is de verzamelvariabele. Het lusrecept uit lectures/4a_lussen geeft de startwaarde, de stap en het stopmoment.

row = []
for number in range(5):
    row = row + [number * number]

assert row == [0, 1, 4, 9, 16]

Opdracht 10

De binnenste lus bouwt per rij een new_row; de buitenste lus verzamelt die rijen in de 2D-lijst grid.

grid = []
for r in range(3):
    new_row = []
    for k in range(4):
        new_row = new_row + [r * k]
    grid = grid + [new_row]

assert grid == [[0, 0, 0, 0], [0, 1, 2, 3], [0, 2, 4, 6]]

Opdracht 11

Het aantal rijen en kolommen staat direct in de 2D-lijst; daarom is geen lus nodig.

def size(grid):
    """Geeft het aantal rijen en het aantal kolommen van grid terug."""
    return len(grid), len(grid[0])


assert size([[1, 2, 3], [4, 5, 6]]) == (2, 3)
assert size([[7]]) == (1, 1)

Opdracht 12

column_values is de verzamelvariabele. De lus loopt langs de rijen en voegt uit elke rij het element op kolom k toe.

def column(grid, k):
    """Geeft kolom k van grid als lijst terug."""
    column_values = []
    for r in range(len(grid)):
        column_values = column_values + [grid[r][k]]
    return column_values


assert column([[1, 2, 3], [4, 5, 6]], 1) == [2, 5]
assert column([[1, 2, 3], [4, 5, 6]], 0) == [1, 4]
assert column([[7]], 0) == [7]