Debug an ISBN Validator - Tests 9-11 and 17-20

Tell us what’s happening:

Hello,
In my current code I cannot pass the tests for tests number 9-11 and tests 18-20. I know that the way that I have solved test 8 is a bit non-conventional, yet it works. However, i don’t know why the above mentioned tests are not passing. I would appreciate any feedback or help!

Your code so far

def validate_isbn(isbn, length):
    isbn_str = str(isbn)
    isbn_arr = [[i,isbn_str[i]] for i in range(len(isbn))]
    for i in range(len(isbn)):
        print(isbn_arr[i][0],isbn_arr[i][1]) # enumerating the elements of the string
    if len(isbn) != length:
        print(len(isbn))
        print(f'ISBN-{length} code should be {length} digits long.')
        return
    print(len(isbn),'Length isbn track') # checking the length of the code
    
    dict_num ={
        '0':0,
        '1':1,
        '2':2,
        '3':3,
        '4':4,
        '5':5,
        '6':6,
        '7':7,
        '8':8,
        '9':9
    }

    main_digits = isbn[0:length] # empty list then fill with the for loop
    print(main_digits)
    given_check_digit = []
    for i in range(len(main_digits)):
        for key in dict_num.keys():
            if main_digits[i] == key:
                given_check_digit.append(dict_num[key])
    if len(given_check_digit) != length: 
        return(print('Invalid character was found.'))
    main_digits_list = [int(digit) for digit in main_digits]
    print(main_digits_list)
    # 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: ')
    values = user_input.split(',')
    isbn = values[0]
    try:
        length = int(values[1]) # story 2 error
    except IndexError:
        print('Enter comma-separated values.')
    except ValueError:
        print('Length must be a number.')

    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

It looks like actually that is not my code when I pull that up. I guess I helped someone else at some point in time and overwrote my own code. If your still stuck on this I will go over it further when I have free time. If you figured it out though congrats and just close the topic so I know that you solved it and I don’t spend unnecessary time debugging it again and can help someone else. Happy Coding!

1 Like

Hey I managed to solve the issue. It was related to a bug in the code that I managed to solve. Thank you for the time to respond btw!

Just to give a hint to the people that might check this post later the defined variables for main_digits, given_check_digits and main_digit_list should be treated separately than the way I have treated them in the post above. Also read the instructions and the code below and check the value for given_check_digits that you should receive for the test to return a Valid ISBN code!

Happy coding!