---
title: "Algoritmisch denken: Variabelen en toekenningsoperatoren"
tags: algoritmisch denken
---
# Variabelen, toekenningsoperator en invoer
Soms kan het handig zijn om tekst of cijfers ergens tijdelijk op te slagen zodat je ze later makkelijk kan hergebruiken zonder ze telkens opnieuw te moeten typen.
Dit doen we aan de hand van variabelen.
Deze kan je beschouwen als doosjes waarin je iets kan insteken.
Je geeft je "doosje" een naam en gebruikt de toekenningsoperator (`=`) om deze naam aan een waarde te linken.
Bijvoorbeeld:
```
jaar = 2020
```
Hier hebben we een nieuwe variabele `jaar` aangemaakt en de toekenningsoperator gebruikt om deze de waarde `2020` te geven.
Nu zit er dus in het doosje `jaar` het getal 2020.
Overal waar je nu `jaar` gebruikt, wordt eigenlijk het getal `2020` gebruikt.
We zouden het vorige en volgende jaar zo kunnen berekenen:
Vorig jaar: `jaar - 1` = `2020 - 1` = `2019`
Volgend jaar: `jaar + 1` = `2020 + 1` = `2021`
:::info
**Belangrijk**
Variabelen kunnen geen spaties in hun naam hebben.
Hun naam kan ook niet beginnen met een cijfer.
Je kan wel underscores (\_) gebruiken of cijfers op andere plekken gebruiken.
:::
## Verschil met wiskunde
Het isgelijkteken (`=`) wordt in Python dus gebruikt om een waarde aan een variabele te geven.
In de wiskunde is dit eerder om de gelijkheid van 2 dingen aan te duiden.
## Voorbeeld BTW berekenen
We willen bijvoorbeeld de btw berekenen van een paar producten.
|Product naam|Prijs (in €)|
|-|-|
|Lucifers|4.59|
|Brood|0.85|
|Kip curry salade|1.25|
:::info
**Ter herinnering**
Om een bepaald percentage van een getal te berekenen kunnen we dat getal vermenigvuldigen met het percentage en dan delen door 100.
Bijvoorbeeld:
21% van 200 kan zo berekend worden:
`200 * 21 / 100`
`= 42`
:::
Om de BTW voor elk van deze producten in de output te tonen kunnen we deze code gebruiken:
```
print(4.59 * 21 / 100)
print(0.85 * 21 / 100)
print(1.25 * 21 / 100)
```
Dan krijgen we in de output de volgende waardes:
(Afronden houden we voorlopig geen rekening mee)
```
0.9639
0.1785
0.2625
```
Maar wat als de overheid het BTW percentage veranderd naar 22%?
Dan zouden we in elke lijn van de code de 21 moeten veranderen naar 22.
Beeld je eens in dat we duizenden producten hebben in plaats van 3, dat zou veel werk zijn.
Het zou makkelijker zijn mocht ik het BTW percentage maar 1 keer ergens moeten schrijven zodat ik ze achteraf kan hergebruiken en makkelijk aanpassen.
Dit kunnen we doen door een variabele te gebruiken:
```
btw_percentage = 21
print(4.59 * btw_percentage / 100)
print(0.85 * btw_percentage / 100)
print(1.25 * btw_percentage / 100)
```
`btw` is hier een variabele die de waarde `21` gegeven wordt.
Het geven van een waarde wordt ook "de variabele declareren" of "de variabele aanmaken" genoemd.
Als het BTW percentage nu veranderd moeten we dit maar op 1 plek in onze code aanpassen.
En, het is nu duidelijker wat we aan het doen zijn in onze code.
Hieronder kan je de code uitproberen:
Probeer eens het BTW percentage te veranderen naar 25.
Zie je dat de waardes in de output ook veranderen als je de code uitvoert?
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/btw?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
## Variabelen een nieuwe waarde toekennen
Na het aanmaken van een variabele kan je deze hergebruiken en een andere waarde geven.
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/Overschrijven-variabele?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
Als je deze code uitvoert zie je de volgende output:
```
3
7
test
```
De variabele a wordt telkens een nieuwe waarde gegevens, en als we deze variabele uitprinten dan krijgen we dus ook elke keer een andere waarde te zien.
## Verschil tussen tekst en getallen
Bekijk de volgende code:
```
a = "123"
```
Hier wordt er een variabele `a` aangemaakt en er wordt de waarde `"123"` in gestoken.
`"123"` is hier geen nummer, maar tekst. (Het staat tussen dubbele aanhalingstekens)
Bekijk de volgende code:
```
a = 123
```
Hier gebeurt ongeveer hetzelfde. Er wordt een variabele `a` aangemaakt en er wordt de waarde `123` in gestoken.
Belangrijk: `123` is hier geen tekst maar een getal! (Er zijn geen dubbele aanhalingstekens rond)
**Waarom is dit belangrijk?**
Wel, als je berekeningen gaat doen met `a` ga je verschillende resultaten krijgen naargelang je er tekst of een getal in gaat opslagen.
BBijvoorbeeld: Deze code zal `124` printen. (1 opgeteld bij 123)
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/som-variabele?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
Maar deze code geeft een fout:
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/som-variabele-fout?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
De berekening die hier gebeurt is deze: `"123" + 1`.
Je probeert dus tekst op te tellen met een getal. Dat gaat niet.
## Tekst *concateneren*
Je kan wel het plusteken gebruiken tussen 2 teksten. Bijvoorbeeld:
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/concatenation?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
Als je het plus teken gebruikt tussen 2 teksten worden deze 2 teksten aan elkaar geplakt.
Je krijgt dan als resultaat `"1234"`.
Teksten aan elkaar plakken noemen we **concateneren** van tekst.
## Tekst omzetten naar getallen
Wat als we een tekst hebben waarin een cijfer zit, en we willen met dit cijfer gaan rekenen?
Dan moeten we eerst deze tekst omvormen naar een getal.
Hiervoor kunnen we `int()` gebruiken.
Deze functie vormt een tekst om naar een getal. (maar enkel als de tekst een cijfer inhoud, ander treed er een fout op)
Bijvoorbeeld:
```
a = "123"
print(int(a) + 4)
```
Deze code zal `127` tonen in de output.
We hebben eerst de tekst `"123"` die in de variabele `a` zit omgevormd naar het getal `123`.
Bij dat getal tellen we dan 4 op.
En dat resultaat (`127`) tonen we dan in de output.
## Getallen omzetten naar tekst
Om het omgekeerde te doen gebruiken we de `str()` functie.
Dit vormt een getal om naar een tekst.
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/str?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
## Invoer (of input)
Je programma kan ook invoer krijgen.
de `input()` functie kan vragen aan de gebruiker van je programma om iets in te typen.
Je kan ook tekst tussen de haakjes van de input functie steken, en dan wordt deze getoond in de output voor het deel waar je typt.
Run de code hieronder door op de groene "play" knop te drukken.
In de output wordt nu `Typ je naam:` getoond.
Klik nu op de output, je ziet een blokje verschijnen. Typ je naam.
Druk daarna op de Enter toets.
Als je "Jeroen" als naam zou hebben ingegeven dan staat er nu in de output `Hallo, Jeroen`
Belangrijk: `input()` geeft altijd tekst terug.
Dus als je `9` in typt en dit in een variabele steekt dan steekt er `"9"` in die variabele, niet `9`.
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/UnselfishPleasantLicense?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
**Wat gebeurt er in deze code?**
Op de eerste lijn `naam = input("Typ je naam: ")`
Het programma stuurt eerst deze tekst naar de output: `"Typ je naam: "`
En dan wacht het tot de gebruiker van het programma iets typt in de output.
Als de gebruiker dan op enter drukt dan gaat het programma verder.
De tekst die de gebruiker heeft ingetypt wordt dan opgeslagen in de variabele `naam`.
Dan wordt de tekst `"Hallo, "` en de naam van de gebruiker geconcateneerd. (aan elkaar geplakt)
Deze geconcateneerde tekst wordt dan naar de output gestuurd.
:::info
**Belangrijk:**
De `input()` functie geeft ++tekst++ terug.
Dus als je een getal intypt en je wil daarmee rekenen, dan moet je eerst de `int()` functie gebruiken om de tekst om te vormen naar een getal.
:::
## Oefeningen
### :pencil: Oefening 1: Som en vermenigvuldiging
Hieronder hebben 2 variabelen een waarde gekregen, `x` en `y`.
De som van deze variabelen wordt al gestuurd naar de output.
Zorg er voor dat op de 2e lijn van de output het product van de 2 variabelen komt. (Product = vermenigvuldigen)
Gebruik de 2 variabelen om de berekening te maken in de code.
De verwachtte output is dus:
```
12
20
```
<iframe height="400px" width="100%" src="https://repl.it/@jpelgrimsschep/som?lite=true" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals"></iframe>
:::warning
:::spoiler Klik hier om de verbetering te zien
<iframe width="100%" height="400" src="https://www.youtube.com/embed/Mi_93ztv6gQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
:::
### :pencil: Oefening 2: Getallen en tekst omzetten
<iframe frameborder="0" width="100%" height="600px" src="https://repl.it/student_embed/assignment/5340349/ab9276133d5c3b0969d969c20b0c8bbf"></iframe>
:::warning
:::spoiler Klik hier om de verbetering te zien
<iframe width="100%" height="400" src="https://www.youtube.com/embed/go1vX5464A8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
:::