Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

I am trying to pass steps 9 though 13 in my code. I might be overthinking this, but I can’t seem to get the correct message to print in my attempts.

Your code so far

def validate_isbn(isbn, length):
    if len(isbn, length) != length:
        print(f'ISBN-{length} code should be {length} digits long.')
    main_digits = isbn[0:1]
    given_check_digit = isbn[1]
    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:
        print("ISBN-10 code should be 10 digits long.")


    if length == 13:
        expected_check_digit = calculate_check_digit_13(main_digits_list)
    else:
        print("ISBN-13 code should be 13 digits long.")
    
        
    # 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.")
    values = user_input.split(',')
    try:
        isbn = values[0]
        length = int(values[1])
    except ValueError:
        print("Length must be a number.")
    isbn = values[0]
    length = int(values[1])
    try:
        isbn = int(values[0])
    except ValueError:
        print('Invalid character was found.')
    if length == 10 or length == 13:
        validate_isbn(isbn, length)
    elif not length == 10 or length == 13:
        print('Length should be 10 or 13.')
    else:
        validate_isbn(isbn, length)
    

#main()

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

Hi @MirandaKaylene,

How are you testing?

Happy coding!

edit: I’m typing it into the console, but I am getting these error messages:

Traceback (most recent call last):
File “main.py”, line 91, in
File “main.py”, line 84, in main
File “main.py”, line 2, in validate_isbn
TypeError: len() takes exactly one argument (2 given)

And what is that error message telling you?

The first line says where the code that caused the error started, line 91. Then your code went to line 84 in main(), then it went to line 2 in validate_isbn(). And the TypeError message is telling you exactly what the issue is on line 2.

So, fix that and test in the console again.

When I did this, I worked through the “Example Input” in the table.

Happy coding!