Debug an ISBN Validator - Debug an ISBN Validator

Tell us what’s happening:

“\x7f” appears at index 0 of the “value” list of the main() function for no apparent reason. Every time I run the program, even with the same input, a random amount of this text appears, causing its length to vary randomly, which in turn causes the rest of the program to crash even when it shouldn’t.
when a print (value) with the input 1530051126,10 it shows [“1\x7f53001\x7f51126”,“10”] and print (len(value[0]) shows 19

Your code so far

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[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: ')
    values = user_input.split(',')
    print (values)
    isbn = values[0]
    length = int(values[0])
    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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 OPR/126.0.0.0

Challenge Information:

Debug an ISBN Validator - Debug an ISBN Validator

Welcome back to the forum @merodiador

1. You should comment out the call to the main function to allow for the rest of the tests to work properly.

Happy coding

I’m not seeing the text you report, but I am seeing this in the console:

Enter ISBN and length:
1530051126,10
[‘1530051126’, ‘10’]
Length should be 10 or 13.

Please double-check what you are assigning to length.

thats why its so strange for me every time i do it i get a random amount of that text “\x7f”, some time its give the correct value. When i pass the code to VScode its always works as intended, its a problem with the page but its make de tests fails for no reason

Would you post a screenshot please? And the tests are failing because of the error I pointed out above.

after “Enter ISBN and lenght:” its the input, and in the next line is the result of print(value)

Please fix the error I pointed out above and then try it.

EDIT: I haven’t been able to find out what would cause that escape sequence to show up in your ISBN string.

I finally did the lab, the problem was something about the comand input() when I set the user_input directly its dosent cause the problem.