ID.nl logo
Zo kun je programmeren in Python - Deel 4
© Reshift Digital
Zekerheid & gemak

Zo kun je programmeren in Python - Deel 4

In de href="https://computertotaal.nl/artikelen/pc/zo-kun-je-programmeren-in-python-deel-3/" rel="noopener noreferrer" target="_blank">vorige les</a> gebruikten we in Python de functies input en print voor invoer en uitvoer. In deze les gaan we hiermee verder en bespreken we allerlei manieren om de uitvoer aan te passen. Omdat we vaak de elementen uit een lijst of dictionary op een speciale manier willen tonen, gaan we ook nog dieper in op hoe je door de elementen van een lijst of dictionary loopt.

In de vorige les gebruikte je de functie input om een getal aan de gebruiker te vragen en de functie print om uitvoer op het scherm te tonen. Die uitvoer bleef tot nu toe vrij elementair. Daarom bekijken we eerst allerlei mogelijkheden om de uitvoer aan te passen.

De uitvoer van print aanpassen

In de vorige les gebruikten we deze opdracht om een getal uit een dictionary op het scherm te tonen:

print(getallen[getal])

Maar wat als je meerdere objecten op dezelfde regel wilt tonen? Dat kan eenvoudig door meerdere objecten aan de functie print door te geven, gescheiden door een komma. Verander bijvoorbeeld de laatste regel in het laatste programma van vorige les door:

>>> print(getal, "is gelijk aan", getallen[getal])1 is gelijk aan één

Alle objecten die je aan print doorgeeft, worden gescheiden door een spatie getoond.

Na de objecten die je aan de functie print doorgeeft, kun je nog argumenten toevoegen die de uitvoer van print veranderen, namelijk sep en end. Met sep (afkorting van separator) verander je de spatie tussen objecten door een andere afscheiding, en met end vervang je het einde van de uitvoer (standaard ‘\n’ waarmee je een newline of een nieuwe regel aanduidt) door iets anders. Bijvoorbeeld:

>>> print(getal, getallen[getal], sep = ': ', end = '\n\n')1: één>>>

Door aan het argument end twee newlines toe te kennen, komt er een lege regel na de uitvoer.

Plaatshouders

Als je meerdere objecten in één uitvoer met print wilt opnemen en/of complexere zaken aan de uitvoer wilt veranderen, komt de functie format van pas. In de eenvoudigste vorm pas je die functie toe op een string waarin je met {} plaats vrijhoudt. Het argument dat je aan de functie doorgeeft, komt op de plaats van die {}:

>>> 'Je hebt {} gekozen.'.format(1)'Je hebt 1 gekozen.'

Dat werkt ook met meerdere plaatshouders:

>>> 'Je hebt {} gekozen tussen de getallen {} en {}.'.format(2, 1, 10)'Je hebt 2 gekozen tussen de getallen 1 en 10.'

Je kunt de plaatshouders ook een volgnummer geven, zodat ze in een andere volgorde in de uitvoer komen dan de argumenten die je aan format doorgeeft:

>>> '{1} <= {0} <= {2}'.format(2, 1, 10)'1 <= 2 <= 10'

Maar vaak is het duidelijker als je de argumenten een naam geeft en die namen ook in de plaatshouders gebruikt:

>>> '{min} <= {getal} <= {max}'.format(min=1, max=10, getal=2)'1 <= 2 <= 10'

Door een lijst lopen met for

Vaak wil je niet één regel uitvoer tonen met print, maar meerdere, bijvoorbeeld voor alle elementen in een lijst of dictionary. We hebben dus een manier nodig om al die elementen af te gaan. Dat kan met een for-lus, zoals in het volgende programma:

namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']for naam in namen:print(naam)

Python gaat elk element uit de lijst met namen af en toont dit element met print. Als je zowel de index als de inhoud van elk element wilt tonen, maak je gebruik van de handige functie enumerate:

namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']

for index, naam in enumerate(namen):print('{}: {}'.format(index, naam))

Door een dictionary lopen met for

We kunnen met een for-lus ook door alle elementen van een dictionary lopen. Afhankelijk van waarin je juist geïnteresseerd bent, kan dat op drie manieren. We tonen in het volgende programma achtereenvolgens hoe je door alleen de sleutels gaat, door alleen de waardes en door de sleutels met hun bijbehorende waardes:

scores = {'lies': 6231, 'bas': 2, 'kees': 18, 'mireille': 482, 'aniek': 35, 'bert': 184}

print('Spelers')for speler in scores:print(speler)

print()

print('Scores')for score in scores.values():print(score)

print()

print('Spelers met score')for speler, score in scores.items():print('{}: {}'.format(speler, score))

De sleutels van een dictionary kun je ook opvragen met de functie keys, maar dat is hier niet nodig. Bijvoorbeeld:

scores.keys()

Tupels

In de for-lus waarmee we zowel de index als de waarde van alle elementen van een lijst doorlopen en de for-lus waarmee we zowel de sleutel als de waarde van alle elementen van een dictionary doorlopen zie je dat we twee elementen tegelijk na de for zetten: index, naam respectievelijk speler, score. Twee elementen met een komma ertussen vormen een speciaal datatype in Python: een tupel (tuple). Je kunt ook variabelen van het type tuple aanmaken, maar dat heb je normaal niet vaak nodig.

List comprehension

For-lussen zijn handig, maar voor complexere bewerkingen wat omslachtig. Stel dat we de lengte van de langste naam uit een lijst willen berekenen. Met een for-lus kunnen we dat als volgt doen:

namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']

max_lengte = 0

for naam in namen:lengte = len(naam)if lengte > max_lengte:max_lengte = lengte

print(max_lengte)

Dit werkt en is vrij duidelijk, maar het kan beter. Voor dit soort bewerkingen heeft Python een handig concept: list comprehension. Daarmee kunnen we de hele voorgaande berekening vervangen door één regel:

namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']

print(max([len(naam) for naam in namen]))

Deze regel zegt: voor elke naam in de lijst met namen bereken je de lengte van de naam, en daarvan bereken je het maximum. Het stuk [len(naam) for naam in namen] is een beknopte manier waarmee we een lijst aanmaken van de lengtes van alle elementen in de lijst namen.

Tekst uitlijnen en opvullen

Dan gaan we nu even terug naar de functie format. Daarmee kunnen we tekst uitlijnen, zowel links, rechts als gecentreerd, en lege ruimte opvullen met willekeurige tekens. Een voorbeeld:

>>> '{:=^15}'.format('Titel')'=====Titel====='

En met iets als:

print('{naam:<6} : {score:0>6}'.format(naam='kees', score=3))

krijgen we als uitvoer:

kees : 000003

Met ^ centreren we tekst, met < lijnen we tekst links uit en met > lijnen we tekst rechts uit. Na het uitlijningsteken komt het totaal aantal tekens dat de tekst maximum mag innemen. Vóór het uitlijningsteken kan nog optioneel een teken komen waarmee we lege ruimte opvullen. En als we de argumenten van format een naam geven, komt die naam vóór de dubbele punt.

Samenvatting

In deze les hebben we allerlei manieren gezien om de uitvoer van print aan te passen, zoals tekst uitlijnen en lege ruimte opvullen. We hebben ook gezien hoe je door de elementen van een lijst of dictionary loopt, zodat je die een voor een kunt tonen. Verder zijn we ook op list comprehension ingegaan, een krachtige manier om zonder lus berekeningen uit te voeren op alle elementen in een lijst of dictionary. In de volgende les gaan we het weer over invoer en uitvoer hebben, maar dan met bestanden. Bovendien kijken we ook hoe je foutmeldingen in je programma afvangt.

Opdracht 1

Neem de volgende dictionary met scores: scores = {'lies': 6231, 'bas': 2, 'kees': 18, 'mireille': 482, 'aniek': 35, 'bert': 184} Gebruik list comprehension om een lijst met tupels aan te maken waarvan elk tupel bestaat uit de naam met een hoofdletter en de score gedeeld door 100.

Uitwerking

>>> scores = {'lies': 6231, 'bas': 2, 'kees': 18, 'mireille': 482, 'aniek': 35, 'bert': 184}>>> [(speler.capitalize(), score/100) for (speler, score) in scores.items()][('Lies', 62.31), ('Bas', 0.02), ('Kees', 0.18), ('Mireille', 4.82), ('Aniek', 0.35), ('Bert', 1.84)] Met scores.items() krijgen we een lijst van tupels terug van de sleutels en waardes van de dictionary. Met list comprehension passen we in elk van deze tupels de sleutel en waarde zoals gevraagd aan.

Opdracht 2

Neem de volgende dictionary met scores: scores = {'lies': 6231, 'bas': 2, 'kees': 18, 'mireille': 482, 'aniek': 35, 'bert': 184} Met alle kennis uit deze les kun je deze personen en hun scores in een tabel tonen, met als linkerkolom de namen en als rechterkolom de bijbehorende scores. De namen moeten links uitgelijnd zijn en de scores rechts met nullen vooraan. Je code moet met namen en scores van willekeurige lengte kunnen werken.

Uitwerking

scores = {'lies': 6231, 'bas': 2, 'kees': 18, 'mireille': 482, 'aniek': 35, 'bert': 184} max_naam = max([len(naam) for naam in scores]) max_getal = max([len(str(score)) for score in scores.values()]) for speler, score in scores.items(): print('{speler:<{speler_breedte}}{score:0>{score_breedte}}'.format(speler=speler, speler_breedte=max_naam+3, score=score, score_breedte=max_getal)) Dit is een heel compact programma waarin alle kennis tot nu toe en van deze les bij elkaar komt. We berekenen eerst de maximumlengte van een naam door list comprehension toe te passen op de sleutels van de dictionary met scores. Daarna doen we hetzelfde voor de maximumlengte die we nodig hebben om de scores weer te geven. Daarna lopen we door alle spelers en bijbehorende scores. We geven aan de functie format als argumenten de speler, de maximumlengte van de spelersnaam (waarbij we 3 optellen om de kolommen van elkaar te scheiden), de score en de maximumlengte van de score door. In de plaatshouder voor de speler geven we met < aan dat de naam van de speler links wordt uitgelijnd, en met {speler_breedte} daarna geven we aan hoeveel tekens lang de uitlijning dient te zijn. Daarna doen we hetzelfde voor de score, maar daar lijnen we rechts uit en vullen we de cijfers aan met nullen vooraan. Merk op dat alles in onze code wat begint met print op één lange regel komt.

Cheatsheet

for: een lus die voor alle elementen in een lijst of dictionary uitgevoerd wordt. list comprehension: een beknopte manier om een lijst aan te maken. newline: het teken \n waarmee je een nieuwe regel aanduidt. tupel: een reeks objecten met een komma ertussen.

▼ Volgende artikel
Waar voor je geld: 5 mini-pc's als desktop- of laptopvervanger
© ID.nl
Huis

Waar voor je geld: 5 mini-pc's als desktop- of laptopvervanger

In de rubriek Waar voor je geld gaan we op zoek naar producten voor een mooie prijs die je leven makkelijk(er) maken. Werk je vaak thuis, maar is je werkplek niet al te groot? Dan kun je overwegen om een klein formaat pc aan te schaffen. Een mini-pc voldoet aan die behoefte, het enige dat nodig is, is een aparte monitor.

Een mini-pc kan een goede oplossing zijn voor thuiswerkplekken die niet al te groot zijn, of waar je simpelweg gewoon een opgeruimder bureau wil hebben. Mini-pc's zijn compact, maar snel en veelzijdig genoeg om er je gewone werk op te doen of om op te gamen. Wij vonden vijf krachtige mini-pc's voor je.

Acer Revo Box RB102-01W Mini

De Acer Revo Box RB102-01W Mini is een compacte computer die zijn rekenkracht ontleent aan een Intel Core Ultra 5 125U processor. Deze processor is ontworpen om een balans te bieden tussen prestaties en energie-efficiëntie. Voor het uitvoeren van je dagelijkse taken en het wisselen tussen verschillende applicaties beschikt het systeem over 8 GB aan DDR5 werkgeheugen. De opslag van je bestanden, software en het besturingssysteem wordt verzorgd door een 512 GB SSD, wat bijdraagt aan snelle opstart- en laadtijden. Qua connectiviteit kun je gebruikmaken van een reeks poorten. Zo zijn er meerdere USB-aansluitingen beschikbaar voor je randapparatuur. Voor het aansluiten van beeldschermen is de mini-pc uitgerust met zowel een HDMI- als een DisplayPort-uitgang. Om verbinding te maken met een netwerk, is er een 2.5 Gigabit Ethernetpoort aanwezig. Het systeem wordt geleverd met Windows 11 voorgeïnstalleerd.

Specificaties

Formaat: 13,1 x 13,1 x 4,3 cm
Processor:
Intel Core Ultra 5 125U
Werkgeheugen:
8 GB DDR5
Harde schijf:
512 GB SSD
Netwerk:
Wifi 6E, Bluetooth, 2.5 Gigabit LAN

MSI Cubi 5 12M-002EU

De MSI Cubi 5 12M-002EU is een rappe mini-pc van slechts 12,4 × 12,4 × 5,4 centimeter. Via de bijgesloten VESA-beugel monteer je de behuizing optioneel achterop een pc-monitor. Ondanks het nogal kleine formaat betreft het een volwaardige pc waarop je één of twee schermen kunt aansluiten. Gebruik hiervoor de HDMI- en/of DisplayPort-aansluiting aan de achterzijde. Verder zien we hier twee netwerk- en usb-poorten. Via drie usb-ingangen aan de voorzijde sluit je makkelijk randapparaten aan. Voor draadloze communicatie heeft de binnenzijde een bluetooth- en wifi-adapter.

In het kleine 'doosje' zit een ssd van 512 GB. Hierop is Windows 11 Pro voorgeïnstalleerd. Om die reden leent de Cubi 5 12M-002EU zich goed voor zakelijke gebruikers, want deze Windows-editie beschikt over extra veiligheidsfuncties. De Intel Core i5-1235U-processor voldoet voor dagelijkse pc-taken prima. Deze processor heeft tien rekenkernen waarvan de snelste twee zijn afgeregeld op een maximale klokfrequentie van 4,4 GHz. Tot slot is er een geheugenmodule van 8 GB RAM ingebouwd. Blijkt dat op den duur onvoldoende, dan kun je eventueel upgraden naar maximaal 64 GB RAM. Deze mini-pc is als alternatief ook met meer rekenpower verkrijgbaar.

Specificaties

Formaat: 12,4 x 12,4 x 5,4 cm
Processor:
Intel Core i5-1235U
Werkgeheugen:
8 GB DDR4
Harde schijf:
512 GB SSD
Netwerk:
Wifi 6E, Bluetooth 5.3, 1x Gigabit LAN, 1x 2.5 Gigabit LAN

Lenovo ThinkCentre M70q Gen 5 Mini PC 

De Lenovo ThinkCentre M70q Gen 5 is een compacte computer die zijn prestaties haalt uit een Intel Core i5-14400T processor. Voor het uitvoeren van je taken en het draaien van software is het systeem voorzien van 16 GB aan DDR5 werkgeheugen. Dit type geheugen heeft een hogere snelheid dan zijn voorganger, DDR4. Als het gaat om de opslag van je bestanden en programma's, dan maak je gebruik van een 512 GB SSD. De aanwezigheid van een SSD is van invloed op de opstarttijd van de computer en de laadsnelheid van je applicaties. Verbindingen met het internet en je lokale netwerk leg je via de ingebouwde Wi-Fi 6 (802.11ax) module of de aanwezige ethernetpoort. Voor het koppelen van randapparatuur zoals een monitor, muis of extern opslagapparaat, beschikt de mini-pc over een variatie aan poorten, waaronder HDMI, DisplayPort en meerdere USB-aansluitingen. Het besturingssysteem dat vooraf geïnstalleerd is, is Windows 11 Pro.

Specificaties

Formaat: 17,9 x 18,3 x 3,7 cm
Processor:
Intel Core i5-14400T
Werkgeheugen:
16 GB DDR5
Harde schijf:
512 GB SSD
Netwerk:
Wifi 6E, Bluetooth 5.3, Gigabit LAN

DELL OptiPlex 3000 Thin Client - N6005

De DELL OptiPlex 3000 in deze Thin Client-uitvoering is een systeem dat is ontworpen voor specifieke computertaken. Het apparaat draait op een Intel Pentium Silver N6005 processor, een chip die de basis vormt voor de functionaliteit. Voor het werkgeheugen is er 16 GB RAM aanwezig, wat van invloed is op de prestaties bij het gebruiken van meerdere programma's. De opslag bestaat uit een SSD met een capaciteit van 256 GB, waarop het besturingssysteem en je applicaties worden geïnstalleerd. Dit model is uitgerust met Dell ThinOS, een specifiek besturingssysteem dat is gericht op het werken met virtuele desktopomgevingen. Voor het aansluiten van je apparatuur beschikt de computer over diverse poorten. Je vindt er onder andere USB 3.2-poorten, een netwerkaansluiting en twee DisplayPort-uitgangen voor het koppelen van beeldschermen. De compacte behuizing maakt het mogelijk om het systeem op verschillende manieren te plaatsen

Specificaties

Formaat: 18,2 x 17,8 x 3,6 cm
Processor:
Intel Pentium Silver N6005
Werkgeheugen:
16 GB DDR4
Harde schijf:
256 GB SSD
Netwerk:
Gigabit LAN

Blackview MP100 Mini PC

Binnen de compacte behuizing van de Blackview MP100 vind je een AMD Ryzen 7 5825U processor, een chip met 8 kernen die de taken van het systeem verwerkt met een maximale turbofrequentie van 4.5 GHz. Voor het gelijktijdig gebruiken van verschillende programma's is het systeem, afhankelijk van de uitvoering, voorzien van 16 GB of 32 GB DDR4 werkgeheugen. Mocht je in de toekomst meer geheugen nodig hebben, dan is dit uit te breiden tot een maximum van 64 GB. De opslag van je bestanden en software wordt verzorgd door een M.2 SSD, met een capaciteit van 512 GB of 1 TB. Qua verbindingen heb je de beschikking over Wi-Fi 6 en Bluetooth 5.2 voor draadloze connectiviteit. Fysieke aansluitingen zijn er ook volop: het apparaat heeft onder andere USB 3.2-poorten, twee Type-C poorten, een HDMI-aansluiting en een DisplayPort. Hiermee kun je tot drie 4K-beeldschermen tegelijk aansturen. Het vooraf geïnstalleerde besturingssysteem op dit model is Windows 11 Pro.

Specificaties

Formaat: 12,8 x 12,8 x 5,2 cm
Processor: AMD Ryzen 7 5825U
Werkgeheugen:
16 GB of 32 GB DDR4
Harde schijf:
512 GB of 1 TB SSD
Netwerk:
Wifi 6, Bluetooth 5.2, Gigabit LAN

▼ Volgende artikel
Acer lanceert Swift Air 16: ultralichte Copilot+-laptop met AMD Ryzen AI-chip
© Acer
Huis

Acer lanceert Swift Air 16: ultralichte Copilot+-laptop met AMD Ryzen AI-chip

Acer heeft de nieuwe Swift Air 16 (SFA16-61M) gepresenteerd, een ultralichte 16 inch-laptop die minder dan een kilo weegt. De laptop is bedoeld voor gebruikers die veel reizen en combineert een ruim scherm met de nieuwste AI-functies van Windows 11.

De Swift Air 16 draait op de AMD Ryzen AI 300-serie processoren, tot maximaal een Ryzen AI 7 350. Deze chips zijn ontworpen om lokale AI-toepassingen sneller en energiezuiniger uit te voeren. Volgens Acer gaat de batterij tot 13 uur mee. De laptop is bovendien onderdeel van Microsofts Copilot+ pc-programma, waarmee functies als Recall, Click to Do en verbeterde Windows Search beschikbaar zijn voor productiever werken.

De behuizing is gemaakt van een magnesium-aluminiumlegering, wat zorgt voor stevigheid bij een gewicht van minder dan één kilo. Daarmee behoort de Swift Air 16 tot de lichtste laptops met een 16 inch-scherm. Gebruikers kunnen kiezen uit verschillende kleuruitvoeringen en twee schermopties: een WQXGA+ AMOLED-display met 120 Hz verversingssnelheid of een WUXGA IPS-paneel met een refresh rate van 60 Hz. De AMOLED-versie biedt een hoge helderheid (400 nits) en volledige DCI-P3-kleurruimte, wat vooral interessant is voor ontwerpers en andere creatieve professionals.

Voor videogesprekken is de laptop uitgerust met een 2MP Full HD IR-camera met privacysluiter en gezichtsherkenning via Windows Hello. Twee microfoons en luidsprekers zorgen voor helder geluid. Qua aansluitingen zijn er twee USB-C-poorten, een USB-A-poort en een HDMI 1.4-uitgang. Draadloos biedt het apparaat ondersteuning voor wifi 6E en de nieuwste Bluetooth-standaard.


De Acer Swift Air 16 ligt vanaf november 2025 in de Benelux in de winkels, met een adviesprijs vanaf 999 euro.


Wat is een Copilot+ pc?

Een Copilot+ pc is een nieuwe generatie Windows-laptops uitgerust met speciale AI-chips. Deze zorgen ervoor dat functies als spraakcommando's, samenvatten van documenten of beeldherkenning lokaal worden uitgevoerd in plaats van in de cloud. Dat maakt ze sneller en energiezuiniger.