Binnen het ISBN-13 (International Standard Book Numbering) systeem krijgt elk boek een unieke code toegewezen die bestaat uit 13 cijfers. De eerste 12 daarvan geven informatie over het boek zelf, terwijl het laatste louter een controlecijfer is dat dient om foutieve ISBN-13 codes te detecteren.

ISBN
ISBN in tekst en streepjescode.

Als $$x_1, \ldots, x_{12}$$ de eerste 12 cijfers van een ISBN-13 code voorstellen, dan wordt het controlecijfer $$x_{13}$$ als volgt berekend: \[\begin{align} o &= x_1 + x_3 + x_5 + x_7 + x_9 + x_{11} \\ e &= x_2 + x_4 + x_6 + x_8 + x_{10} + x_{12} \\ x_{13} &= (10 - (o + 3e)\!\!\!\!\mod{10})\!\!\!\!\!\mod{10}\end{align}\] Het controlecijfer $$x_{13}$$ kan m.a.w. de waarden 0 tot en met 9 aannemen, waardoor ISBN-13 codes uitsluitend uit cijfers bestaan.

De website ISBNdb.com1 is een databank van boeken. Deze website biedt ook een zogenaamde Application Programming Interface2 (API) aan, die toelaat dat computerprogramma's gegevens opvragen over een bepaald boek via de ISBN-13 code van dat boek. Voor deze opgave hebben we de API nagebootst (want die is ondertussen betalend geworden). Als je bijvoorbeeld de URL

opent dan wordt het onderstaande bestand gedownload.

<?xml version="1.0" encoding="UTF-8"?>
<ISBNdb server_time="2012-11-19T07:28:26Z">
<BookList total_results="1" page_size="10" page_number="1" shown_results="1">
<BookData book_id="the_practice_of_computing_using_python" isbn="0136110673" isbn13="9780136110675">
<Title>The Practice of Computing using Python</Title>
<TitleLong></TitleLong>
<AuthorsText>William F Punch, Richard Enbody, </AuthorsText>
<PublisherText publisher_id="addison_wesley_a01">Addison Wesley</PublisherText>
</BookData>
</BookList>
</ISBNdb>

Dit is een bestand in het XML-formaat4. Het bevat heel wat informatie over het boek, maar voor deze oefening zijn we enkel geïnteresseerd in de titel, de auteurs en de uitgevers. Het belangrijkste deel van de URL

is het rode gedeelte. Op deze plaats moet je de ISBN-13 code ingeven van het boek waarover je gegevens wil opzoeken.

Opgave

Schrijf een functie print_boek_info waaraan een ISBN-13 code (str) moet doorgegeven worden. Als er een geldige ISBN-13 code wordt doorgegeven, dan moeten de titel, de auteurs en de uitgevers uitgeschreven worden zoals in onderstaand voorbeeld. Als er een fout zit in de gegeven ISBN-13 code, dan wordt een foutboodschap uitgeschreven zoals in onderstaand voorbeeld.

Voorbeeld

>>> print_boek_info('9780136110675')
Titel: The Practice of Computing using Python
Auteurs: William F Punch, Richard Enbody
Uitgever: Addison Wesley
>>> print_boek_info('9780136110678')
Foutieve ISBN-13 code

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 tekstbestanden6.

Opmerking

De oplossing die in deze video besproken wordt, gebruikt een andere URL dan diegene die nu in de opgave staat. Op dit punt na blijft de rest van de oplossing wel geldig.