Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

I can’t seem to complete assignment 12 and 13:
When the user enters 9781530051120,10, you should see the message ISBN-10 code should be 10 digits long.
When the user enters 1530051126,13, you should see the message ISBN-13 code should be 13 digits long.

I don’t know why, or where to look for it, or how to do it. Don’t give me the “Socratic method” of explaining, I have no idea where to even start. Just give me the answer straight, so that I can compare it to my code and realize my mistakes

Your code so far

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:150.0) Gecko/20100101 Firefox/150.0

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

Hi @Mester,

Sorry. We don’t do that.

The original starting code contained this line, which you have blown away and overwritten with validation that should probably be placed in the main() function instead.

print(f'ISBN-{length} code should be {length} digits long.')

You may want to reset this challenge and try again.

Happy coding!

Well, it’s defenitely not going to be happy like this, if I don’t even know what I don’t know.

If you have a specific question about your code, we’re happy to try to help.

Where do I even begin? How do I use the raise, try, finally, etc. functions? Do I need to import pdb?

When I did this challenge, I started by entering ISBN and length combinations from the “Example Input” column in the table. If a console error was displayed, I’d look at the line that caused the error and fix the code there.

I referred back to the theory lectures often, especially:

Understanding Error Handling - How Does Exception Handling Work? | Learn | freeCodeCamp.org

Understanding Error Handling - What Is the Raise Statement and How Does It Work? | Learn | freeCodeCamp.org

You might want to take a look at the very last paragraph in the last theory lecture. I found that useful.

Good luck and happy coding!

How do I actually input ISBN numbers??

Copy (CTRL + C) an ISBN/length combination from the instructions.

Position your cursor under the console prompt, then right-click to bring up the context menu and click “Paste”.

Ctrl + V doesn’t work here; you need to use the context menu.

Hmmm, maybe I’m doing something wrong but it doesn’t allow me to right-click for the “context” menu on the console menu.

Well, if that doesn’t work for you (can’t understand why), you can always just type in the ISBN and length.

But where? There is no place to type except the main.py part. I cannot type in the console or terminal