Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

I have no ideas why step 11 cannot past.

def validate_isbn(isbn, length):

if len(isbn, length) != 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:
    expec

Your code so far

def validate_isbn(isbn, length):
    
    if len(isbn, length) != 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)
    # 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])
        if not isinstance(isbn, int):
            print("Invalid character was found.")
    except ValueError:
        print('Length must be a number.')

    if length == 13 and isbn != 13:
        print("ISBN-13 code should be 13 digits long.")
    
    if length == 10 and isbn != 10:
        print("ISBN-10 code should be 10 digits long.")
    
    if length == 10 or length == 13:
        print("Valid ISBN Code.")
        validate_isbn(isbn, length)        
    else:
        print('Length should be 10 or 13.')
    

# validate_isbn(1530051125,10)
# main()

Your browser information:

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

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

You seem to have some sort of error in your code. What do the tests say?

When the user enters 1530051125,10, you should see the message Invalid ISBN Code..

Check Your Code

// running tests
11. When the user enters 1530051125,10, you should see the message Invalid ISBN Code..
// tests completed

Additionally what does it say in the terminal? The terminal could potentially have error messages that could explain why your code isn’t working.

Welcome to the forum @397711163 !

If I uncomment main() in your code, then paste 1530051125,10 in the console, I see this in the console:

Enter ISBN and length: 
1530051125,10
Invalid character was found.
ISBN-10 code should be 10 digits long.
Valid ISBN Code.
Traceback (most recent call last):
  File "main.py", line 87, in <module>
  File "main.py", line 81, in main
  File "main.py", line 3, in validate_isbn
TypeError: len() takes exactly one argument (2 given)

Shouldn’t processing stop as soon as an invalid character is found? Why does your code think isbn has an invalid character? Why does your code think isbn is not 10 digits long? And what is that error on Line 3?

Happy coding!