Tell us what’s happening:
Hello, I believe I have tested out all of the things and it returns at it is. Here I have my code with testmain to test my code, it return as it is. However, I am failing at basic things such as 7. I’m not sure what I need to do to achieve that, even though inputting it in testmain shows that it works.
with a lot of trail and error and backtracking I believe this is a result of doing try and except in a way of using raise. Maybe someone can help me out with how I can do this?
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-1]
given_check_digit = isbn[length-1]
#main_digits_list = [int(digit) for digit in main_digits]
main_digits_list = [int(digit) for digit in main_digits]
#for x in main_digits_list:
# print(x)
# 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: ')
try:
values = user_input.split(',')
if len(values)!=2:
raise IndexError
#if not isbn.isdigit():
# raise ValueError("Invalid character was found.")
for num in values[0]:
if not (num.isdigit() or num.upper()=="X" ):
raise ValueError("Invalid character was found.")
if not values[1].isdigit():
raise ValueError("Length must be a number.")
isbn = values[0]
length = int(values[1])
except IndexError:
print("Enter comma-separated values.")
return
except ValueError as error:
print(error)
return
if length == 10 or length == 13:
validate_isbn(isbn, length)
else:
print('Length should be 10 or 13.')
'''
def testmain(inp):
#user_input = input('Enter ISBN and length: ')
try:
#values = user_input.split(',')
values = inp.split(',')
if len(values)!=2:
raise IndexError
#if not isbn.isdigit():
# raise ValueError("Invalid character was found.")
for num in values[0]:
if not (num.isdigit() or num.upper()=="X" ):
raise ValueError("Invalid character was found.")
if not values[1].isdigit():
raise ValueError("Length must be a number.")
isbn = values[0]
length = int(values[1])
except IndexError:
print("Enter comma-separated values.")
return
except ValueError as error:
print(error)
return
if length == 10 or length == 13:
validate_isbn(isbn, length)
else:
print('Length should be 10 or 13.')
#testmain('1530051125')
'''
main()
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0
Challenge Information:
Debug an ISBN Validator - Debug an ISBN Validator