In the ISBN-10 (International Standard Book Numbering) system that was used until the end of 2006, each book is assigned a unique 10-digit code. The first nine digits uniquely identify the book itself, whereas the last digit merely serves as a check digit to detect invalid ISBN-10 codes.

ISBN
ISBN in text and barcode.

If $$x_1, \ldots, x_9$$ represent the first nine digits of an ISBN-10 code, the check digit $$x_{10}$$ is computed as \[x_{10} = (x_1+ 2x_2+ 3x_3+ 4x_4+ 5x_5+ 6x_6+ 7x_7+ 8x_8+ 9x_9)\!\!\!\!\mod{11}\] As a result, the check digit $$x_{10}$$ always takes a value in between 0 and 10. If the check digit is equal to 10, it is represented in the ISBN-10 code by the capital X. As such, only a single character is needed to represent the check digit.

The digits of an ISBN-10 code are subdivided into four groups that are separated by dashes (-). The first and the last group each contain a single digit, whereas the two middle groups each contain four digits.

Assignment

Write a function isISBN that takes a string (str). The function must return a Boolean value (bool) that indicates whether the argument represents a valid ISBN-10 code. A valid ISBN-10 code is a 13-character string (str; 10 digits and 3 dashes), has a correct check digit and has its digits grouped in the proper way.

Example

>>> isISBN('9-9715-0210-0')
True
>>> isISBN('997-150-210-0')
False
>>> isISBN('9-9715-0210-8')
False

Ask Pythia …

In the following instruction video, Pythia explains how to tackle this assignment. Watch this video as a stepping stone to solve other exercises about lists and tuples1.