Binnen het ISBN-10 (International Standard Book Numbering) systeem dat tot eind 2006 gebruikt werd, kreeg elk boek een unieke code toegewezen die bestaat uit 10 cijfers. De eerste 9 daarvan geven informatie over het boek zelf, terwijl het laatste louter een controlecijfer is dat dient om foutieve ISBN-10 codes te detecteren.

ISBN
ISBN in tekst en streepjescode.

Als $$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. Als het controlecijfer gelijk is aan 10, dan wordt dit in de ISBN-10 code genoteerd als de hoofdletter X. Op die manier wordt het controlecijfer altijd door één enkel karakter voorgesteld.

Opgave

Schrijf een functie isISBN waaraan één enkel argument moet doorgegeven worden. De functie moet een Booleaanse waarde (bool) teruggeven, die aangeeft of het argument een string (str) is die een geldige ISBN-10 code voorstelt.

Opmerking

De functie moet expliciet controleren of het argument dat wordt doorgegeven wel degelijk een string (str) is. Alle argumenten die geen string zijn, beschouwen we immers als ongeldige ISBN-10 codes.

Voorbereiding

In de editor hieronder (waar je een oplossing voor de opgave kan indienen) hebben we reeds een skelet van de oplossing opgemaakt. Bekijk zeker ook onderstaande video over test-driven development om te leren werken met doctests. Hierdoor zal je de laatste drie statements van het skelet beter begrijpen, en de rol die daarbij gespeeld wordt door de docstring die we in het skelet gedefinieerd hebben.

Voorbeeld

>>> isISBN('9971502100')
True
>>> isISBN('9971502108')
False
>>> isISBN('53WKEFF2C')
False
>>> isISBN(4378580136)
False

Pythia spreekt …

In onderstaande video legt Pythia uit hoe je deze opgave kunt aanpakken. Bekijk deze video als opstapje naar het oplossen van de oefeningen over functies1.