12: Tips

Deze les bevat een aantal nieuwtjes over Python die niet aan bod zijn gekomen in de voorgaande lessen.

print Opties

Tot nu toe, is de enige manier om te printen die we tot nu toe gezien hebben is het gebruik van de  print() functie,  waarmee meerdere items kunnen worden geprint ieder op een regel waarbij de items gescheiden worden door een spatie. In feite, print accepteert een paar keyword argumenten die het mogelijk maken dit gedrag aan te passen aan je behoeften.

  • Om de spatie separator aan te passen aan een andere string S, kun je dat realiseren met het argument sep = «S»
  • Om het "end-of-line" teken te vervangen door een andere string S, voeg het argument end = «S» toe

Deze nieuwe eigenschap, keyword argumenten, is het gemakkelijkst te demonstreren met een paar voorbeelden.

Voorbeeld
Voorbeelden van sep en end. Kijk naar het effect van elke printopdracht.

De keyword argumenten moeten aan het einde van de lijst met argumenten worden toegevoegd  anders zal een error optreden. Wanneer je ze beiden gebruikt kunnen ze in willekeurige volgorde worden opgegeven.

Programmeeroefening: Alfabet Aerobics
Debug het volgende programma, door gebruik te maken van hetgeen we zojuist geleerd hebben, zodanig dat de uitvoer het alfabet in hoofdletters op een regel wordt afgedrukt.

Namen die zijn toegestaan voor variabelen en functies

  • Namen kunnen bestaan uit letters, getallen en het underscore (_) teken
  • Het eerste teken van een naam moet een letter zijn.
  • Python maakt onderscheid tussen hoofdletters en kleine letters.

Zo is my_3rd_int een naam die is toegestaan, maar 3rd_int is dat niet.

Voorbeeld
Een voorbeeld over onderscheid tussen hoofdletters en kleine letters.

Aflopende for loops & andere

Herinner je je nog hoe we lieten zien hoe for loops getallen kunnen doorlopen in opklimmende volgorde:

Voorbeeld
Een for loop

Vaak is het nodig om een for loop te schrijven die getallen doorloopt in dalende volgorde (van grootste  naar de kleinste). Om dat te kunnen doen gebruiken we range with met een derde argument met de  naam stap:

Voorbeeld
Negatieve stap bij range

Wanneer je even nadenkt, zul je kunnen vaststellen dat range(0, 5) hetzelfde is als  range(0, 5, 1): de default ophoging is 1. Denk eraan dat range(start, stop, step) al stopt, een stap vóórdat stop bereikt wordt. Voor nog meer informatie ga, naar de  Python handleiding.

Programmeeroefening: Lucky Sevens
Schrijf een programma waarbij je een for loop gebruikt met stap grootte 10, om alle getallen met 2 cijfers te printen die eindigen op een 7, in oplopende volgorde.

Op dezelfde manier kun je string[x:y:-1] gebruiken om een deel van een string om te draaien.
Voorbeeld:
stringVoorbeeld='abcdef'
stringVoorbeeld=stringVoorbeeld[4:1:-1]
print(stringVoorbeeld)

Zo geeft string[x:y:2] een substring van string met de tekens op positie x, x+2, x+4, ...

Bij een for loop, is er een andere manier om een aflopende volgorde te realiseren: reversed(range(x, y)). Het gaat van y-1 tot x in afnemende volgorde.

Minder code schrijven

Python kent verschillende manieren om de hoeveelheid code te verminderen; we laten er hier een paar zien:

Op deze website zullen we er niet altijd gebruik van maken, omdat daardoor het programma soms moeilijker leesbaar wordt.

Toekenningsopdrachten

In Python "x += 1" betekent "voeg aan x 1 toe." Het is gelijk aan "x = x + 1" zoals we beneden zullen laten zien:

Voorbeeld
Voorbeelden van +=, -=, *=, /=

Op dezelfde manier bestaan er operatoren voor delingen (//=), modulo (%=), en machtsverheffen (**=).

Een body op dezelfde regel (inline blocks)

We hebben een aantal statements gezien die worden gevolgd door een ingesprongen "body" met code: for, if, else, elif, while, en def, bijvoorbeeld:

if x==y:
  «body» #ingesprongen, meerdere regels
In het speciale geval dat een «body» maar één regel bevat kun je dat in Python ook als volgt schrijven:

if x==y: «body» # enkele regel
Hier volgt een voorbeeld:

Voorbeeld
Body opdrachten op één regel

Dit is echter wel beperkt: een samengestelde body met een dubbele punt erin (if, for, etc) kan niet worden gebruikt als een inline block. Bijvoorbeeld if 2>1: if 4>3: print() geeft een syntax error.

Meerdere opdrachten

Python staat je toe meerdere opdrachten te combineren op één regel:

Voorbeeld
Meerdere opdrachten

Merk op dat dit je in staat stelt om de verwissel-opgave door een programma van 1 regel op te lossen!

Vergelijkingen Rijgen

Python staat je ook toe om meerdere vergelijkingen te combineren:

Voorbeeld
Vergelijkingen rijgen
Elke keten v1 c1 v2 c2 v3 ... waar alle v waarden zijn en alle c vergelijkinsoperatoren, wordt hetzelfde behandeld als (v1 c1 v2) and (v2 c2 v3) and...

Standaardwaarden voor [:] en range()

Je kan de start- en/of eindwaarden ook weglaten wanneer je de sub-string operator [:] gebruikt. (Dit geldt ook voor lijsten, zoals we in de volgende les zullen zien.) De standaardwaarde van de eerste index is 0 (het begin van de string) en de standaardwaarde van de laatste index is de lengte van de string. Op dezelfde manier is range(n) een afkorting voor range(0, n).

Voorbeeld
Gebruik maken van de standaardwaarde van [:] en range()

None

Sommige functies geven een waarde terug als hun belangrijkste effect, zoals abs(x), maar andere functies die belangrijker zijn vanwege hun effecten, zoals print(), geven de 'default' waarde None terug:

Voorbeeld
Het resultaat van print

We gebruiken None als een speciale waarde in Python wanneer er geen andere waarde bekend is. Als je type(None) uitvoert zie je dat None zelfs z'n eigen type heeft: NoneType. Laten we ook gelijk even bekijken wat het type van een type-variabele is:

Voorbeeld
Het type van een type

In de volgende opgave moet je de tussenresultaten van een lang commando nauwkeurig in de gaten houden door gebruik te maken van type en print.

Scramble Opgave: One None
De uitvoer van print(type(print(type(type(print(print())))))) bestaat uit 4 regels. Zet ze in de goede volgorde.
  • <class 'type'>
  • None
  • «blank line»
  • <class 'NoneType'>
Correct!

Laten we het hier maar even bij houden. Je kunt nu door naar de volgende les!