Transformeer ieder getal
Laat squares een nieuwe lijst met kwadraten in invoervolgorde teruggeven.
Je hebt een lijst met oefentijden in minuten en wilt alleen de echte werkblokken omrekenen naar seconden. Daarvoor kun je een lege lijst maken, de tijden doorlopen en geschikte antwoorden toevoegen. Een comprehension schrijft datzelfde verzamelpatroon compact op.
Een comprehension bouwt een nieuwe collectie door invoer te doorlopen. Bij een list comprehension staan vierkante haken om de bewerking en de lus. [minutes * 60 for minutes in durations] verzamelt voor iedere invoerwaarde het berekende aantal seconden.
Lees zo'n regel in uitvoeringsvolgorde: neem een waarde uit durations, geef haar tijdelijk de naam minutes en bereken wat vóór for staat. Voeg dat antwoord toe aan de nieuwe lijst. Herhaal dit voor de volgende waarde.
De lijst behoudt de volgorde van de invoer. Een lege invoer levert een lege lijst op. De oorspronkelijke lijst wordt door dit lezen en verzamelen niet veranderd.
Een filter beslist welke invoerwaarden meedoen. In een comprehension staat die voorwaarde achteraan, zoals if minutes > 0. Python controleert haar voor een invoerwaarde voordat het antwoord voor die waarde wordt verzameld.
Druk op Voorbeeld uitvoeren. De nulminutenblokken vallen weg en de positieve tijden worden omgerekend; daarna zie je twee andere soorten comprehensions.
durations = [0, 2, 5, 0, 3]
seconds = [minutes * 60 for minutes in durations if minutes > 0]
print(seconds)
print(durations)
labels = ["lezen", "maken", "lezen"]
loud = {label: label.upper() for label in labels}
print(loud)
unique = {label.upper() for label in labels}
print(len(unique))[120, 300, 180]
[0, 2, 5, 0, 3]
{'lezen': 'LEZEN', 'maken': 'MAKEN'}
2
| Invoer in minuten | Groter dan nul? | Opgenomen antwoord |
|---|---|---|
| 0 | Nee | Geen element |
| 2 | Ja | 120 |
| 5 | Ja | 300 |
| 0 | Nee | Geen element |
| 3 | Ja | 180 |
Een filter maakt geen lege plaats voor een afgewezen element. Daarom heeft de uitvoerlijst drie elementen terwijl de invoer er vijf had. De onderlinge volgorde van twee, vijf en drie blijft wel behouden.
Een dictionary comprehension gebruikt accolades met een dubbele punt vóór for. Links van die dubbele punt bereken je de sleutel, rechts de waarde. In het voorbeeld wordt ieder label aan zijn hoofdletterversie gekoppeld.
Een sleutel komt maar één keer in een dictionary voor. Het herhaalde label lezen maakt daarom geen tweede gelijknamig paar. Je krijgt een koppeling per unieke sleutel.
Een set comprehension gebruikt accolades zonder zo'n dubbele punt. Zij verzamelt alleen waarden en bewaart die uniek. Het voorbeeld heeft daardoor twee unieke hoofdletterlabels; er hoort geen positievolgorde bij die set.
De buitenste haken vertellen dus wat je maakt. Kies vierkante haken voor een lijst, accolades met sleutel en waarde voor een dictionary en accolades met alleen een waarde voor een set. Het resultaat moet passen bij de opdracht, ook als de getoonde inhoud op elkaar lijkt.
Wat vóór for staat wordt verzameld. Zet je daar alleen de vergelijking, dan krijg je een lijst booleans. Deze zelfstandige foutvariant bevat geen filter achteraan.
durations = [0, 2, 5, 0, 3]
seconds = [minutes > 0 for minutes in durations]
print(seconds)[False, True, True, False, True]
Er verschijnen vijf antwoorden: False, True, True, False en True. Python heeft voor iedere invoerwaarde de vergelijking berekend en bewaard. Het heeft geen minuten verwijderd of omgerekend.
Zet de gewenste berekening vóór for en de selecterende voorwaarde achteraan. Controleer daarbij of een grens zelf mag meetellen: positief betekent groter dan nul, zodat nul in deze opdracht wordt overgeslagen.
De opdracht voor beginletters moet lege woorden overslaan voordat zij index nul gebruikt. Lege tekst geldt in een voorwaarde als onwaar, dus if word laat alleen niet-lege woorden door. Van die woorden mag je vervolgens het eerste teken lezen en met .upper() omzetten.
Voor woordlengtes gebruik je len(word), de lengte die Python voor die tekst geeft. Python telt daarbij Unicode-codepunten, geen bytes. De invoer is al opgeschoond; zelf randspaties verwijderen hoort niet bij deze opdrachten.
Laat squares een nieuwe lijst met kwadraten in invoervolgorde teruggeven.
Laat positives alleen waarden groter dan nul behouden.
Laat word_lengths ieder uniek woord aan zijn lengte koppelen.
Laat initials hoofdletters van niet-lege woorden als set teruggeven.
Hierna gebruik je deze bouwstenen bij tabellen en andere gegevens met meerdere lagen.
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.