Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

i understand its to do with the comma, but i dont understand how to get it to ignore that its a comma and just read the 9 i only have test 15 left to pass.

Your code so far

def validate_isbn(isbn, length):
    if len(isbn) != length:
        print(f'ISBN-{length} code should be {length} digits long.')
        print(isbn,type(isbn), length, type(length))
        return
    
    main_digits = isbn[0:length -1]
    given_check_digit = isbn[length -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)
    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():
    numbers = '1234567890'
    numbers = set(numbers)
    
    user_input = input('Enter ISBN and length: ')
    isbn = user_input[0:-3]
    length = user_input[-2:]
    if isbn.isdigit():  
        if ',' in user_input:
            if length.isdigit(): 
                length = int(length)   
                if length == 10 or length == 13:
                    validate_isbn(isbn, length)
                else:
                    print('Length should be 10 or 13.')
            else:
                print('Length must be a number.')
        else:
            print('Enter comma-separated values.')
    elif isbn[9] == 'X':
        if ',' in user_input:
            if length.isdigit(): 
                length = int(length)   
                if length == 10 or length == 13:
                    validate_isbn(isbn, length)
                else:
                    print('Length should be 10 or 13.')
            else:
                print('Length must be a number.')
        else:
            print('Enter comma-separated values.') 
    else:
        print("Invalid character was found.")
    
        
#main()

Your browser information:

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

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

GitHub Link: freeCodeCamp/curriculum/challenges/english/blocks/lab-isbn-validator/686b9720ee1d032bd77a480a.md at main · freeCodeCamp/freeCodeCamp · GitHub

There’s few ways to check if comma is in string and/or remove it from it. I’d suggest to try considering a more general case - string containing two parts with varying length, with comma between them. Ie.:

"1,5300511269"
"153,00511269"
"153005,11269"
"15300511,269"
"1530,0511269"

It’s not possible to hardcode the expected position of comma separator. How both parts can be reliably obtained?

I will explain with an example:
1530051126,9
isbn = 1530051126
length = ,9

So your program output this.

The issue is that you are always using the last two characters as the length. However, this fails when the last part is not two characters long.

I suggest splitting the input by the comma to get the isbn and length separately.

hey thank you guys! i just figured it out. yall have a blessed day and happy coding!

Hey what is the solution of your problem ?

Welcome to the forum @thetrapper7

Please create your own topic when you have specific questions about your own challenge code. Only respond to another thread when you want to provide help to the original poster of the other thread or have follow up questions concerning other replies given to the original poster.

The easiest way to create a topic for help with your own solution is to click the Help button image located on each challenge. This will automatically import your code in a readable format and pull in the challenge URL while still allowing you to ask any question about the challenge or your code.

Thank you.