Stuck with step 9 and 20 in the Debug an ISBN Validator challenge

Hi,

I’m stuck with my code. I cannot validate step 9 and 20 of the Debug an ISBN Validator challenge. All other steps are ok.

The problem is my given_check_digit doesn’t match the calculated expected_check_digit in example’s cases “1530051123”,10 and “9781530051120”,13.

We are not suppose to touch the calculate_check_digit functions, are we?

Please help. It drives me crazy…

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[-1]
    if given_check_digit == "X":
        main_digits = isbn[0:length-1]
    print(given_check_digit)
    print(length)
    try:
        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)
            print(expected_check_digit)
        else:
            expected_check_digit = calculate_check_digit_13(main_digits_list)
            print(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.')
    except ValueError:
        print("Invalid character was found.")



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(',')
    try:
        isbn = values[0]
        length = int(values[1])
    except IndexError:
        print("Enter comma-separated values.")
        exit
    except ValueError:
        print("Length must be a number.")
        exit
    if length == 10 or length == 13:
        validate_isbn(isbn, length)
    else:
        print('Length should be 10 or 13.')

# main()

validate_isbn("1530051123",10)
print()
validate_isbn("9781530051120",13)
print()
validate_isbn("080442957X",10)

I will give you an hint to check the value of main_digits here

when you ask for help it is a great help for the contributors on the forum if you could also include the link to the challenge you are asking for help with