# Debug an ISBN Validator - Debug an ISBN Validator

**URL:** <https://forum.freecodecamp.org/t/debug-an-isbn-validator-debug-an-isbn-validator/786052>\
**Category:** Curriculum Help\
**Tags:** python\
**Created:** [April 16, 2026, 5:54pm UTC](https://forum.freecodecamp.org/t/debug-an-isbn-validator-debug-an-isbn-validator/786052 "2026-04-16T17:54:54Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mester](https://avatars.discourse-cdn.com/v4/letter/m/35a633/32.png) [@Mester](https://forum.freecodecamp.org/u/Mester)\
**Post date:** [April 16, 2026, 5:54pm UTC](https://forum.freecodecamp.org/t/debug-an-isbn-validator-debug-an-isbn-validator/786052/1 "2026-04-16T17:54:54Z")

</div>

### Tell us what’s happening:

I am only missing task 12 and 13 but have no idea how to do them. If I add “if” statements, the other completed tasks will just fail.

### Your code so far

```py
def validate_isbn(isbn, length):
    if length == 10:
        if not isbn[:9].isdigit():
            print('Invalid character was found.')
            return
                
        if not (isbn[-1].isdigit() or isbn[-1] == 'X'):
            print('Invalid character was found.')
            return

    elif length == 13:
        if not isbn.isdigit():
            print('Invalid character was found.')
            return
        
    main_digits = isbn[:-1]
    given_check_digit = isbn[-1]
    print("DEBUG main_digits:", main_digits)
    print("DEBUG given_check_digit:", given_check_digit)
    main_digits_list = [int(digit) for digit in main_digits]
    # Calculate the check digit from other digits
    if length == 10:
        expected_check_digit = calculate_check_digit_10(main_digits_list)
    else:
        expected_check_digit = calculate_check_digit_13(main_digits_list)
    # Check if the given check digit matches with the calculated check digit
    if given_check_digit == expected_check_digit:
        print('Valid ISBN Code.')
    else:
        print('Invalid ISBN Code.')
def calculate_check_digit_10(main_digits_list):
    # Note: You don't have to fully understand the logic in this function.
    digits_sum = 0
    # Multiply each of the first 9 digits by its corresponding weight (10 to 2) and sum up the results
    for index, digit in enumerate(main_digits_list):
        digits_sum += digit * (10 - index)
    # Find the remainder of dividing the sum by 11, then subtract it from 11
    result = 11 - digits_sum % 11
    # The calculation result can range from 1 to 11.
    # If the result is 11, use 0.
    # If the result is 10, use upper case X.
    # Use the value as it is for other numbers.
    if result == 11:
        expected_check_digit = '0'
    elif result == 10:
        expected_check_digit = 'X'
    else:
        expected_check_digit = str(result)
    return expected_check_digit
def calculate_check_digit_13(main_digits_list):
    # Note: You don't have to fully understand the logic in this function.
    digits_sum = 0
    # Multiply each of the first 12 digits by 1 and 3 alternately (starting with 1), and sum up the results
    for index, digit in enumerate(main_digits_list):
        if index % 2 == 0:
            digits_sum += digit * 1
        else:
            digits_sum += digit * 3
    # Find the remainder of dividing the sum by 10, then subtract it from 10
    result = 10 - digits_sum % 10
    # The calculation result can range from 1 to 10.
    # If the result is 10, use 0.
    # Use the value as it is for other numbers.
    if result == 10:
        expected_check_digit = '0'
    else:
        expected_check_digit = str(result)
    return expected_check_digit
def main():
    user_input = input('Enter ISBN and length: ')
    if "," not in user_input:
        print("Enter comma-separated values.")
        return
    values = user_input.split(',')
    isbn = values[0]
    length_str = values[1]
    if not length_str.isdigit():
        print("Length must be a number.")
        return
    length = int(length_str)
    if length == 10 or length == 13:
        validate_isbn(isbn, length)
    else:
            print('Length should be 10 or 13.')

#main()

```

### Your browser information:

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0`

### Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

> **[freeCodeCamp.org](https://www.freecodecamp.org/learn/python-v9/lab-isbn-validator/debug-an-isbn-validator)**
>
> Learn to Code — For Free

---

<div class="post-metadata">

**Author:** ![dhess](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/dhess/32/406235_2.png) [@dhess](https://forum.freecodecamp.org/u/dhess)\
**Post date:** [April 16, 2026, 7:40pm UTC](https://forum.freecodecamp.org/t/debug-an-isbn-validator-debug-an-isbn-validator/786052/2 "2026-04-16T19:40:34Z")

</div>

Hi @Mester,

It looks like you have completely rewritten this area of the code that checks the length of the ISBN and returns the expected message if the length doesn’t match:

```auto
    if len(isbn, length) != length:
        print(f'ISBN-{length} code should be {length} digits long.')
        return
    main_digits = isbn[0:length]
    given_check_digit = isbn[length]
    main_digits_list = [int(digit) for digit in main_digits]

```

Also, the theory lecture preceding this challenge talks about exception handling, but I don’t see that being used in your code. You may want to review.

Happy coding!

---

<div class="post-metadata">

**Author:** ![system](https://global.discourse-cdn.com/freecodecamp/original/3X/e/1/e1c433102e34b46dfaa3e15d13ab9a514b127078.svg) [@system](https://forum.freecodecamp.org/u/system)\
**Post date:** [May 14, 2026, 7:41pm UTC](https://forum.freecodecamp.org/t/debug-an-isbn-validator-debug-an-isbn-validator/786052/3 "2026-05-14T19:41:17Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
