CS 303e - Lab 6

For this project, you will write a program that checks the validity of ISBN numbers. This program will be submitted in file ISBN.py by 11 pm on the due date.

Problem Description: Most books are assigned a number called the international standard book number, or ISBN. This sequence typically contains 10 decimal digits, though sometimes the last digit is replaced with the capital letter X. Hyphens are sometimes embedded in between the digits to make the ISBN number more readable. The first nine digits uniquely identify a book, and the tenth character is a check digit that is used to verify the correctness of the first nine digits - the check digit is chosen so that a weighted sum calculated from digits of the ISBN number is divisible by 11. Since the check digits sometimes needs to be 10 in order to make this value divisible by 11, we use X to represent 10.

How to compute the weighted sums:
Form two lists of integers based on the digits in the ISBN. The first list, sum1, contains partial sums of the digits from the ISBN number. The second list, sum2, contains partial sums of the values in the sum1 list. The ISBN is correct if the last entry in sum2 is divisible by 11.

Example: Consider the ISBN number 0-321-53711-4. First, we remove (or ignore) the hyphens. So we get:

 digits in ISBN 0 3 2 1 5 3 7 1 1 4 list sum1 entries 0 3 5 6 11 14 21 22 23 27 list sum2 entries 0 3 8 14 25 39 60 82 105 132

The ith entry in sum1 is the sum of the digits in positions 1 through i in the ISBN number, if you consider the leftmost digit to be in position 1.

The ith entry in sum2 is the sum of the integers in positions 1 through i in the sum1 list.

Since 132 is divisible by 11, the ISBN is valid.

Covered topics: functions, lists, file I/O, loops, string library functions.

You must use several functions to decompose the problem into smaller problems. All code except import statements and a call to main() must be contained in a function. No function should be very long or complicated, and each function should have a well-defined action.

Your program will process a file called isbn.txt that contains one ISBN per line. Some of the ISBNs will be valid, and some will be invalid. The ISBNs may contain one or more hyphens, and some of the invalid ISBNs may contain extra characters, or too few digits. The file that we will use to test your program will be different from the sample file. You will read one line at a time as a string, then store the digits (and possibly the character X) in a list. Do NOT include extraneous characters or hyphens in this list.  Note that the ISBN is invalid if:
• there are characters other than the digits '0' through '9' and the characters 'x', 'X', and '-',
• if there are more than 9 digits 0 through 9 before the last character,
• if the last character (other than a hyphen) is not a digit from 0 to 9, 'x' or 'X'.
You will use three lists in this project: One for the digits (and check character) in the ISBN number, one for the list sum1 described above, and another for sum2.

Open a file isbnValid.txt for writing, and write one line for each entry in the file isbn.txt. Each line should contain one ISBN number from the isbn.txt file, plus either the word "valid" or "invalid". For the sample isbn.txt file, isbnValid.txt looks like this:

0-321-53711-4   valid
-0-131-62959-X   valid
88-10001202   invalid
0--1014114578a-   invalid

Do not forget to open and close the input and output files.
You will submit your program in file ISBN.py by 11 pm on the due date.

Your program will be graded on correctness, documentation (comments to describe each code block), use of white space to improve readability, use of the correct program header, program decomposition (your use of functions to divide the problem into manageable pieces), quality of algorithm, use of meaningful variable and function names, adherence to coding style conventions that we have discussed in class, and readability of your code.

Notes:
1. The proctors will be grading this project. They will post a message to the yahoo group when he is finished grading and uploading project scores and project feedback (via turnin). Contact them first with any questions about grading.
2. If you submit this project late using slip days, you MUST email the proctors when you submit your project to let them know you are done.
3. This project is to be done individually. You should NOT
• look at anyone else's code,
• give code to another student,
• or have someone other than class staff assist you in fixing your program.
See the section of the syllabus on academic dishonesty. Look at the information on Moss, the plagiarism detection software, from the syllabus. Moss does an excellent job of detecting similarities in different programs. If you give your code to another student, you are as guilty of academic dishonesty as they are.  I am reminding you due to the many problems with academic dishonesty that have occurred this semester.

4. Submit your project via turnin in file ISBN.py.