Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

Ive spent quite some time on checks 7 9 16 19 and 20 and yet i cant get them to work.

ive mostly been stumped with check 7 though (which can be seen towards the top)

Your code so far

def validate_isbn(isbn, length):
    def not_numb(v):

        return v != v

    isbn = str(isbn)
    if not_numb(isbn) == False:
        print("Invalid character was found.")
    if not_numb(length) == False:
        print("Length must be a number.")
    if length == 13:
        if len(isbn) != 13:
            print("ISBN-13 code should be 13 digits long.")
    elif length == 10:
        if len(isbn) != 10:
            print("ISBN-10 code should be 10 digits long.")
    elif length != 13 and length != 10:
        print("Length should be 10 or 13.")

    main_digits = isbn[0:length]
    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)
    elif length == 13:
        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.")
    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.')
#main()

print(validate_isbn(1530051125,10))

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

try to use a tool like https://pythontutor.com/ that runs the code line by line so you can see exactly where the issue is happening

keep in mind that the tests will run main(), so you need to include that one in your debugging

what are you trying to do here? v != v will always give the same value, False, as both sides are the same variable