Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

i don’t actually understand what i need to do to complete the lab.

how this programm works? which values i should use? cuz given_check_digit is just the same as isnb and as i understood calculations works fine & i don’t need to fix 'em

Your code so far

def validate_isbn(isbn, length):

    if len(isbn) != 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]


    # 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)

    print(given_check_digit, expected_check_digit)
    # 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)

    #print(expected_check_digit)
    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'
        print(expected_check_digit)
    else:
        
        expected_check_digit = str(result)
        print(expected_check_digit)

    return expected_check_digit



def main():

    user_input = input('Enter ISBN and length: ')
    
    try:
        values = user_input.split(',')
        isbn = values[0]
        length = int(values[1])

        if length == 10 or length == 13:
            validate_isbn(isbn, length)
        else:
            print('Length should be 10 or 13.')
    
    except IndexError: print("Enter comma-separated values.")
    except ValueError: print("Length must be a number.")

main()

Your browser information:

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

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

that’s an issue, the check digit is the last one only

Hi @MrHampter

To help you debug try adding the following print call at the end of your code.

print(validate_isbn('15-0051126', 10))

Happy coding

everything works fine, im debuging in VS code becuz it’s much comfortable for me

the tests are checking if the function is working fine, if the tests don’t pass, the function is not working fine

did you make changes? did you fix the check_digit? the check digit is the last digit of the ISBN, it can’t be the whole ISBN

1 Like

i was reading about ISBN, so i just now realised how it works :smiling_face_with_tear: