Ga naar hoofdinhoud

Stap 2: Een rij uit tekst (for over een tekst)

info

Deze stap gebruikt if uit If en else. Nieuw is een for-loop over de tekens van een tekst; die staat hieronder.

Een for-loop kan over range lopen, en over een lijst, zoals in Lijsten. Hij kan ook over een tekst lopen. Net zoals hij bij een lijst elk element langsgaat, gaat hij bij een tekst elk teken langs:

for teken in "#.#":
print(teken)

Uitvoer:

#
.
#

Elke ronde krijgt teken het volgende teken uit de tekst. Ook een . of een spatie telt als teken. Probeer het zelf met een langere tekst:

for teken in "..##..":
    print(teken)

Precies dit heb je nodig voor één rij van een plaatje: loop langs de tekens, en teken bij elke # een vakje.

Opdracht: een hart van zes rijen​

Plak je programma uit stap 1 in het veld. Ben je het kwijt, neem dan de oplossing van stap 1.

Schrijf een functie rij(regel, x, y) die één regel tekst tekent: bij een # een zwart vakje, bij een . niets. Het eerste teken komt op (x, y), elk volgend teken 20 stappen verder naar rechts.

Teken daarna het hart, met één aanroep van rij per regel. De bovenste regel begint op (-70, 60), en elke volgende regel 20 lager. De bloem uit stap 1 heb je niet meer nodig. Kopieer de regels van het hart uit het blok hieronder, dan typ je geen punt te veel of te weinig.

.##.##.
#######
#######
.#####.
..###..
...#...

Een zwart pixelhart van zeven vakjes breed en zes hoog

# Plak hier je programma uit stap 1
Klik hier voor een tip.

Binnen rij loop je over de tekens van regel. Na elk teken schuift x een vakje op, ook na een .: een leeg vakje neemt net zo goed ruimte in. Dat optellen hoort dus niet in de if. Voor het hart roep je rij zes keer aan, met steeds een andere regel en een andere y.

Klik hier voor de oplossing.
import turtle

def vakje(x, y, kleur):
turtle.penup()
turtle.goto(x, y)
turtle.fillcolor(kleur)
turtle.begin_fill()
for zijde in range(4):
turtle.forward(20)
turtle.left(90)
turtle.end_fill()

def rij(regel, x, y):
for teken in regel:
if teken == "#":
vakje(x, y, "black")
x = x + 20

turtle.hideturtle()
rij(".##.##.", -70, 60)
rij("#######", -70, 40)
rij("#######", -70, 20)
rij(".#####.", -70, 0)
rij("..###..", -70, -20)
rij("...#...", -70, -40)

x begint bij de waarde die je meegeeft, en krijgt elke ronde 20 erbij. Zo weet vakje steeds waar het volgende vakje moet komen.

Er gaat iets mis​

Het hart is scheef: de gaten zijn weg, en elke rij plakt tegen de linkerkant.

Oorzaak: x = x + 20 staat in de if. Dan schuift x alleen op na een #, en neemt een . geen ruimte meer in.

Oplossing: laat die regel even ver inspringen als de if zelf, zodat hij elke ronde gebeurt.

Kopieer je programma voordat je verdergaat: de editor bewaart het niet.

Door naar stap 3: een heel plaatje.