[8] De ene 1 is de andere niet

advertisement
[8] De ene 1 is de andere niet
Volg mee via 08_Types.py
In de volgende leerfiche gaan we rekenen met Python. Dat kan je in een programma doen, maar dat kan je
ook gewoon vanuit het Shell-venster doen.
We geven al een voorsmaakje: hoeveel is 1 + 2? Typ de som in het Shell-venster in, en druk op enter
>>> 1 + 2
3
>>>
Fantastisch! De uitkomst is 3. Dus onze meester van wiskunde heeft niet gelogen…
Je kan ook rekenen met variabelen. Typ volgende 2 regels na elkaar in de Shell in:
a = 1
b = 2
En typ nu
a + b
En opnieuw verschijnt dezelfde uitkomst: 3.
Typ nu eventjes letterlijk volgende regels in:
c = '1'
d = '2'
en nu:
c + d
Woeps!! Wat krijgen we nu? 1 + 2 blijkt 12 te zijn? Dus de meester van wiskunde heeft toch gelogen??
Neen, niet echt. Wat er bij de c + d bewerking gebeurt is, is dat er niet twee getallen opgeteld zijn bij elkaar,
maar wel 2 stukken tekst aan elkaar geplakt zijn. Eigenlijk staat er dit:
'1' + '2'
Python onderscheidt verschillende types van variabelen, en leidt het type af uit de inhoud.
Python [8] De ene 1 is de andere niet
versie 9/03/2015 1/5
Types: int, float, string en bool
Bekijk de volgende code:
getal1 = 1
getal2 = 1.0
getal3 = '1'
waarOfVals = True
#
#
#
#
Type:
Type:
Type:
Type:
int
float
str (string)
bool
In dit stukje code zie je 4 belangrijke types van variabelen in Python:


getal1 is een integer (int), of een geheel getal. Dit is een positief of een negatief getal (bv. -3) zonder
cijfers na de komma.
getal2 is een floating-point-getal (float), of een getal met cijfers na de komma. Ook al staat er in dit
geval alleen een 0 na de komma, zal Python dit toch intern als een float opslaan, omdat we de 1.0
notatie gebruikt hebben. Je kan dat trouwens nakijken via volgende code:
type(getal2)



Merk trouwens op dat we in Python een punt (.) gebruiken als ‘komma’ en dus geen komma (,)
getal1 en getal2 zijn allebei getallen. Ondanks het feit dat ze van een verschillend type zijn (int
en float) mag je er toch mee rekenen. Dus getal1 + getal2 levert de verwachte uitkomst van 2
op. (eigenlijk 2.0 om precies te zijn)
getal3 is géén getal maar een string. Dat komt omdat we hier de 1 tussen aanhalingstekens gezet
hebben. Om met getal3 te kunnen rekenen moet het stukje tekst dus eerst omgezet worden naar
een getal. Dat kan via de functie int()
getal1 + getal3
getal3 + getal3
getal1 + int(getal3)


# Dit levert een fout op, we tellen string op bij getal
# Dit levert '11' op als resultaat
# Dit levert 2 op als resultaat
Om een string naar een getal te kunnen omzetten moet de inhoud wel duidelijk een getal zijn. Wat
gebeurt er als we int('een') proberen te doen of int('minecraft')?
In het rijtje variabelen dat we gedefinieerd hebben, hadden we nog één variabele over: waarOfVals.
Die hebben we gelijk gemaakt aan True. True en False zijn 2 speciale waarden. Ze betekenen
“waar” en “onwaar” en in programmeertalen noemen we dit Booleaanse waarden. We gaan zometeen
wat dieper in op die Booleaanse waarden. Voorlopig hoef je enkel te onthouden dat we er niet mee
kunnen rekenen in Python.
Om 2 variabelen bij elkaar op te tellen of ze te vergelijken, moeten het variabelen van dezelfde soort zijn. Je
kan dus een getal niet met een stuk tekst (string) vergelijken. Je kan wel 2 stukken tekst met elkaar vergelijken of aan elkaar plakken, of 2 getallen vergelijken of optellen.
Als we aan een gebruiker vragen om iets in te typen via het input-commando, dan levert dit altijd een string
op. Dat zagen we onder andere in het spokenspel: daar moesten we het deurnummer dat gekozen werd
eerst omzetten naar een int voor we het konden vergelijken met het willekeurig getal dat de computer
gekozen had.
Python [8] De ene 1 is de andere niet
versie 9/03/2015 2/5
Dat moet je ook onthouden als we getallen aan het vergelijken zijn. 1 is gelijk aan 1, dat is duidelijk. Maar 1
(zonder aanhalingstekens) is niet gelijk aan '1' (met aanhalingstekens).
1 == 1
1 == '1'
1 == int('1')
# waar
# niet waar
# waar
Booleaanse waarden: True en False
In de voorbeeldjes hierboven zie je al het gebruik van de woorden ‘waar’ en ‘niet waar’ (of ‘onwaar’). In het
Engels is dat True en False.
Elke vergelijking in Python wordt geëvalueerd naar ‘waar’ of ‘onwaar’. Als ik je vraag of 3 kleiner is dan 5,
dan zeg je me dat dat waar is. Als ik vraag of 4 groter is dan 8, dan is dat onwaar.
Bekijk het volgende stukje code even. if betekent ‘als’ en else betekent ‘anders’.
leeftijd = input('Hoe oud ben je? ')
if int(leeftijd) < 7:
print('Je bent nog te jong voor CoderDojo')
else:
print('Python leren is vast iets voor jou!')
Het programma gaat eerst de leeftijd vragen, en gaat dan kijken of die leeftijd jonger is dan 7 of niet.
Als we bv. ‘6’ invullen als leeftijd dan zal de regel
if int(leeftijd) < 7:
gelijk gemaakt worden (dat noemen we “evalueren”) met ‘True’ en dan wordt het zinnetje 'Je bent nog te
jong voor CoderDojo' op het scherm getoond. Als we ‘8’ invullen zal de if evalueren naar ‘False’ en dan
wordt het tweede zinnetje getoond.
We mogen ook letterlijk True en False schrijven. We zouden bv. kunnen schrijven:
if True:
print('Dit is altijd waar.')
else:
print('Dit zinnetje wordt nooit getoond.')
maar dat heeft weinig zin, want het else-stuk wordt daarbij nooit uitgevoerd.
We kunnen True ook gebruiken om een oneindige lus te maken – dat is een stukje programma dat altijd
herhaald wordt en nooit stopt.
while True:
print('Oneindig veel zinnetjes!')
Als je het bovenstaande programma uitvoert zal je Ctrl+C moeten drukken om het te stoppen, want anders
blijft het lopen tot je een lange, grijze baard hebt!
Python [8] De ene 1 is de andere niet
versie 9/03/2015 3/5
Nog een allerlaatste puntje over Booleaanse waarden: Python is niet altijd even strikt op zijn types, en je
hebt dus niet altijd een strikte Booleaanse waarde nodig om een beslissing te nemen.
Volgend stukje code zal werken in Python:
a = 1
if a:
print("Hoera! Ik kan de integer 'a' gebruiken in een if-functie!")
Wat echter veel “netter” is, is om expliciet a te vergelijken met bv. 0:
a = 1
if a > 0:
print('Joepie, dit lukt!')
Strings “optellen”
We springen al even vooruit naar de leerfiche over strings. Daar zal je zien dat we het + teken gebruikt om
2 strings (stukken tekst) aan elkaar te hangen. Dat hadden we bij het begin van deze leerfiche ook al gezien.
Dus:
a = '1'
b = '2'
c = a + b
print(c)
geeft als uitvoer niet 3 maar:
12
En
leeftijd = '10'
print('Ik ben ' + leeftijd + ' jaar oud')
drukt de regel
Ik ben 10 jaar oud
af op het scherm.
Let op, dit werkt alleen als we strings bij elkaar optellen. Onderstaande code geeft een fout; snap je waarom?
print('Ik ben ' + 10 + ' jaar oud')
Python [8] De ene 1 is de andere niet
versie 9/03/2015 4/5
Strings van elkaar aftrekken kan niet zomaar. Dus
print('CoderDojo' - 'Dojo')
levert een fout op.
Je kan wél strings “vermenigvuldigen”. Probeer maar eens:
print('bla' * 10)
Oefening

Maak enkele variabelen aan en experimenteer met de inhoud. Zorg dat je verschillende soorten variabelen hebt, zoals integers, floating-point getallen, strings en booleaanse variabelen. Check hun
type met de functie type(). En experimenteer ook met het omzetten van strings naar integers via
int(), en omgekeerd via str().
Python [8] De ene 1 is de andere niet
versie 9/03/2015 5/5
Download