Vergeet de komma niet
Laat singleton een tuple met precies één waarde teruggeven.
Een routebeschrijving heeft een begin, een eind en soms tussenstops. Je wilt die onderdelen duidelijke namen geven, zonder voor iedere mogelijke routelengte andere code te schrijven. Uitpakken helpt je de vorm van een reeks rechtstreeks aan namen te koppelen.
In de functiemodule gaf je al meerdere waarden samen terug. Die tuple heeft een vaste reeks posities. Je kunt een positie van een bestaande tuple niet vervangen zoals bij een lijst.
De komma maakt de tuple. ("halte",) bevat één element, terwijl ("halte") alleen de tekst tussen haakjes zet. Die laatste vorm heeft hetzelfde type als "halte" zonder haakjes.
Vaste posities betekenen niet dat ieder opgeslagen object onveranderlijk wordt. Bevat een tuple een lijst, dan blijft die lijst zelf veranderbaar. De tuple bewaart dan nog steeds hetzelfde lijstobject op dezelfde positie.
Bij uitpakken geef je elementen van links naar rechts aan namen. outward, back = pair verwacht precies twee elementen. Anders kan Python de waarden niet volgens die afspraak verdelen en krijg je een ValueError.
Bij een route met een wisselend aantal tussenstops wil je niet steeds alle posities uitschrijven. Een ster bij uitpakken vangt de overgebleven elementen op als een lijst. Met first, *via, last = route krijgen het eerste en laatste element een eigen naam, en komt het midden in via.
Druk op Voorbeeld uitvoeren. Vergelijk vooral het type van het midden met de tuple waaruit de onderdelen kwamen.
route = ("station", "brug", "bos", "meer")
first, *via, last = route
print(first)
print(via)
print(last)
short = ("station", "meer")
first, *via, last = short
print(via)
pair = ("heen", "terug")
outward, back = pair
print((back, outward))station
['brug', 'bos']
meer
[]
('terug', 'heen')
De bron is een tuple, maar de ster verzamelt het midden altijd als lijst. Dat geeft je een vaste vorm voor nul, één of meer tussenstops. De ster is hier een onderdeel van het uitpakken, geen vermenigvuldiging en geen afspraak voor functieargumenten.
| Route | first | via | last |
|---|---|---|---|
| station, brug, bos, meer | station | brug en bos in een lijst | meer |
| station, meer | station | lege lijst | meer |
Voor deze verdeling zijn minstens twee elementen nodig: één voor first en één voor last. De opdrachten houden zich aan die invoerafspraak. Bij precies twee elementen is een lege middenlijst dus een geldig resultaat.
Een tuple met één element is gemakkelijk te verwarren met een gewone waarde tussen haakjes. Deze zelfstandige foutvariant laat het verschil zien met type en len. Die laatste functie geeft het aantal elementen van een reeks.
single = ("halte")
print(type(single))
print(len(single))
correct = ("halte",)
print(type(correct))
print(len(correct))<class 'str'> 5 <class 'tuple'> 1
Zonder komma blijft single een tekst van vijf tekens. Met de komma is het een tuple met één element, en dat element is de volledige tekst. Het verschil kan lang onzichtbaar blijven als je alleen de betekenis van het woord bekijkt.
Controleer daarom het contract én het type. Een antwoord met de juiste tekst is nog geen juiste tuple. Voeg de komma toe wanneer één waarde als een bundel met één positie moet worden teruggegeven.
Uitpakken verandert de bron niet. Nadat je een paar in twee namen hebt verdeeld, kun je de namen in een nieuwe volgorde teruggeven. Het voorbeeld wisselt zo de labels heen en terug om.
Ook een punt met twee coördinaten kun je uitpakken. Bereken daarna nieuwe coördinaten en geef die als een nieuwe tuple terug. De verplaatsing verandert daarmee het oorspronkelijke punt niet.
De opdrachten vragen telkens om een specifieke antwoordvorm: één element, een omgekeerd paar, drie onderdelen met een middenlijst, of een verschoven punt. Let op zowel de volgorde als de typen van die onderdelen.
Laat singleton een tuple met precies één waarde teruggeven.
Laat swap een paar in omgekeerde volgorde als tuple teruggeven.
Laat bookends het eerste element, een middenlijst en het laatste element teruggeven.
Laat move dx bij x en dy bij y optellen zonder point te wijzigen.
Hierna zoek je gegevens op met betekenisvolle sleutels in plaats van positiegetallen.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.