ISBN
ISBN in tekst en streepjescode.
ISBN in tekst en streepjescode.

De vorige oefeningen over de ISBN-10 code hadden enkel een hoofdprogramma. In deze oefening wordt een functie toegevoegd om te controleren of de meegegeven parameter een geldige ISBN-10-code voorstelt.

Ter herinnering: indien $$x_1, \ldots, x_9$$ de eerste 9 cijfers van een ISBN-10 code voorstellen, dan wordt het controlecijfer $$x_{10}$$ als volgt berekend: \[x_{10} = (x_1+ 2x_2+ 3x_3+ 4x_4+ 5x_5+ 6x_6+ 7x_7+ 8x_8+ 9x_9)\!\!\!\!\mod{11}\] Het controlecijfer $$x_{10}$$ kan m.a.w. de waarden 0 tot en met 10 aannemen. Indien het controlecijfer gelijk is aan 10, dan wordt dit in de ISBN-10 code genoteerd als de hoofdletter 'X'.

Opgave

Schrijf een logische functie is_isbn met één parameter. De functie moet een Booleaanse waarde teruggeven, die aangeeft of de parameter een string is die een geldige ISBN-10 code voorstelt.

De functie moet bovendien extra controles doen op de parameter:

Voeg ook de volledige type hinting toe!

Voorbeeld

>>> is_isbn('9971502100')
True
>>> is_isbn('9971502108')
False
>>> is_isbn('53WKEFF2CX')
False
>>> is_isbn(4378580136)
False 
Wat is het verschil met de oefening uit hoofdstuk 4?
  • De isbn-code wordt als string doorgegeven aan de functie, wordt dus niet "ingelezen".
  • Het resultaat wordt niet geprint, maar wordt teruggegeven als een logische waarde True/False.
Wat is een logische functie? een functie die een Booleaanse waarde (True/False) teruggeeft.
Wat is de correcte type hinting? def is_isbn(isbn: str) -> bool:
Waar moet ik "OK" en "FOUT" uitprinten? nergens - de functie geeft True of False terug.
Hoe kan ik nagaan of de parameter die wordt doorgegeven wel degelijk een string is? Gebruik type(...) om te zien of een string wordt doorgegeven
Hoe kan ik type(...) verwerken? Verwerk dit direct in een if:
 if type(...) == str 
Hoe kan ik zien of er enkel cijfers in de string staan?
  • Controleer of een teken behoort tot "0123456789" of gebruik de constante digits van de klasse string .
  • Enkel de eerste negen tekens moeten cijfers zijn!!
Het laatste teken mag een cijfer zijn, maar het mag ook X zijn - hoe kan ik hier alle gevallen controleren? Controleer of dit teken voorkomt in "0123456789X".