7. Formatted strings (f-strings)#

Zoals je in het vorige hoofdstuk zag, kun je de waarde van een variabele aan een string vastplakken met de + operator. En als de variabele geen string is, moet je typecasten naar een string met de functie str() . Bijvoorbeeld:

prijs = 11
print('Het boek kost ' + str(prijs) + ' euro.')

Sinds versie 3.6 van Python, kan het verwerken van variabelen in strings echter een stuk eenvoudiger door zogenoemde f-strings te gebruiken.

Wat leer je in dit hoofdstuk
  • Hoe maak je een f-string.

  • Hoe verwerk je waarden van variabelen in een f-string.

  • Hoe verwerk je expressies in een f-string.

  • Hoe kun je extra formatting (opmaak) toepassen in een f-string.

Accolades#

Het enige wat je hoeft te doen om een f-string te maken, is de letter f voor het eerste aanhalingsteken zetten:

tekst = f'Het boek kost 11 euro.'
print(tekst)

Uiteraard kun je de f-string ook rechtstreeks aan de print() aanroep meegeven, zonder de variabele tekst te gebruiken:

print(f'Het boek kost 11 euro.')

Waarden van variabelen verwerk je in een f-string door de naam van de variabele tussen accolades ({ en }) te zetten:

prijs = 11
print(f'Het boek kost {prijs} euro.')

Deze code leest toch een stuk prettiger dan die in het eerste voorbeeld? Een f-string bespaart je aanhalingstekens en plus-tekens waardoor de code beter leesbaar is. En het mooiste is: je hoeft niet te typecasten!

Hoe meer variabelen er in het spel zijn, hoe duidelijker het voordeel van f-strings blijkt:

stad = 'Harlingen'
temperatuur = 15
windkracht = 6

# Met een f-string:
print(f'In {stad} is het {temperatuur} graden bij windkracht {windkracht}.')

# Zonder f-string:
print('In ' + stad + ' is het ' + str(temperatuur) + ' graden bij windkracht ' + str(windkracht) + '.')

Expressies in een f-string#

Behalve de naam van een variabele kun je tussen de accolades in een f-string nog meer code zetten. Bijvoorbeeld expressies zoals 9 + 6 of 3 * 'ha'.

Wat is een expressie?

In programmeertalen is een expressie een berekening met waarden, variabelen, operatoren en functies die een bepaalde waarde oplevert. We zeggen dan dat de expressie evalueert naar die waarde.

prijs_per_stuk = 0.60
aantal = 4
print(f'U betaalt {aantal} * {prijs_per_stuk} = {aantal * prijs_per_stuk} euro.')

Het resultaat van deze code:

U betaalt 4 * 0.6 = 2.4 euro.

Door in de f-string {aantal * prijs_per_stuk} op te nemen, rekent Python de totale prijs uit en plaatst die in de string. Het is alleen wel jammer dat de bedragen 0.6 en 2.4 worden afgerond op één cijfer achter de komma, terwijl het gebruikelijk is om geldbedragen op twee cijfers achter de komma af te ronden. Geen nood, met wat extra formatting lossen we dat snel op.

Extra formatting#

Door achter de variabele of expressie in een f-string een dubbele punt : te plaatsen, kun je extra opmaakregels instellen. Bijvoorbeeld om een getal af te ronden op 2 cijfers achter de komma typ je :.2f.

prijs_per_stuk = 0.60
aantal = 4
print(f'U betaalt {aantal} * {prijs_per_stuk:.2f} = {aantal * prijs_per_stuk:.2f} euro.')

Nu worden de bedragen getoond zoals het hoort:

U betaalt 4 * 0.60 = 2.40 euro.

Het is ook mogelijk om het aantal karakters dat een waarde moet innemen te specificeren. Dat doe je door een integer achter de : te typen. Dit is bijvoorbeeld handig om tekst netjes onder elkaar te positioneren zoals in een tabel:

voornaam1 = 'Graham'
voornaam2 = 'John'
voornaam3 = 'Terry'
achternaam1 = 'Chapman'
achternaam2 = 'Cleese'
achternaam3 = 'Gilliam'
print(f'{voornaam1:10}{achternaam1}')
print(f'{voornaam2:10}{achternaam2}')
print(f'{voornaam3:10}{achternaam3}')

Deze code levert de volgende output:

Graham    Chapman
John      Cleese
Terry     Gilliam

De naam Graham telt zes karakters (letters), maar doordat in de f-string {voornaam1:10} staat, wordt de naam met spaties aangevuld tot 10 karakters. Door dit met alle voornamen te doen, komen de achternamen mooi recht onder elkaar te staan.

Er zijn nog veel meer opmaakmogelijkheden met f-strings. Als je nieuwsgierig bent, kun je hier een lijst vinden.

Opdrachten#

Opdracht 01

Maak in Mu editor een nieuw codebestand en sla het op onder de naam f_strings.py. Kopieer de onderstaande code naar het bestand:

f_strings.py#
1# F-strings - opdracht 01
2
3vak1 = 'Oude Talen en Verhalen'
4cijfer1 = 9
5vak2 = 'Informatica'
6cijfer2 = 8
7
8tekst = 'Voor ' + vak1 + ' had Mariska een ' + str(cijfer1) + ' en voor ' + vak2 + ' een ' + str(cijfer2) + '.'
9print(tekst)

Run het programma om de output te bekijken. Wijzig vervolgens regel 8 van de code zodat de variabele tekst één f-string wordt. Uiteraard mag de output van het programma hierdoor niet veranderen.

Opdracht 02

Maak in Mu editor een nieuw codebestand en sla het op als f_strings_2.py. Kopieer de onderstaande code naar het bestand:

f_strings_2.py#
1# F-strings - opdracht 02
2
3a = 12
4b = 25
5c = 8
6
7print(f' ')

Plaats in regel 7 code tussen de aanhalingstekens zodat het programma exact de volgende output geeft:

Het gemiddelde van de getallen 12, 25 en 8 is 15.

Je mag in regel 7 de variabelen a, b en c gebruiken, maar niet de getallen 12, 25, 8 en 15. Je mag ook geen extra aanhalingstekens toevoegen.