Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

How should I run tests for this lab if the main() function is commented out? Thanks for the help.

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:
        return 'Enter comma-separated values.'
    values = user_input.split(',')
    isbn = int(values[0])
    if not isinstance(isbn, int):   
        return 'Invalid character was found.'
    length = values[1]
    if not isinstance(length, int):
        return '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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

Well you have focused in on the correct line of code.

Have you experimented with changing it?

What do you mean by changing it? Do you mean putting in inputs on the terminal to test out the isbn numbers?

you can uncomment the function call to test your code manually, and then comment it out again if you want to click Check your Code

On my terminal there is a huge white box and a bunch of W’s. How do i get rid of that. It is on all my labs not just this one. Thank you

You can’t. It’s a console bug. A fix is in the works.

If you cannot see console messages, change the theme to “night” for now.

1 Like

Can you try refreshing the page with F5 or Shift+ F5 ?

On my terminal I see the ‘Input ISBN and length: ‘ prompt but after that I type in my input like ‘1530051126,10’ and then what do i press after?

Thanks

You’ll need to press the “Enter” key on the keyboard to complete entering the input into the prompt.

Did the “WWWW” characters in the console go away after you refreshed the page?

1 Like