Skip to content Skip to sidebar Skip to footer

Isbn Final Digit Finder

I am working in python 3 and I am making a program that will take in a 10 digit ISBN Number and applying a method to it to find the 11th number. Here is my current code ISBN=input(

Solution 1:

I think this should do what you want.

defget_isbn_number(isbn):
    digits = [(11 - i) * num for i, num inenumerate(map(int, list(isbn)))]
    digit_11 = 11 - (sum(digits) % 11)
    if digit_11 == 10:
        digit_11 = 'X'    
    digits.append(digit_11)
    isbn_number = "".join(map(str, digits))
    return isbn_number

EXAMPLE

>>>print(get_isbn_number('2345432681'))
22303640281810242428
>>>print(get_isbn_number('2345432680'))
2230364028181024240X

Explanation of second line:

digits = [(11 - i) * num for i, num inenumerate(map(int, list(isbn)))]

Could be written out like:

isbn_letters = list(isbn) # turn a string into a list of characters
isbn_numbers = map(int, isbn_letters) # run the function int() on each of the items in the list
digits = [] # empty list to hold the digits
for i, num in enumerate(isbn_numbers): # loop over the numbers - i is a 0 based counter you get for free when using enumerate
    digits.append((11 - i) * num) # If you notice the pattern, if you subtract the counter value (starting at 0) from 11 then you get your desired multiplier

Terms you should look up to understand the one line version of the code: map, enumerate, list conprehension

Solution 2:

ISBN=int(input('Please enter the 10 digit number: ')) # Ensuring ISBN is an integerwhilelen(ISBN)!= 10:

    print('Please make sure you have entered a number which is exactly 10 characters long.')
    ISBN=int(input('Please enter the 10 digit number: '))
    continueelse:
    Sum = 0for i inrange(len(ISBN)):
        Sum += ISBN[i]
    Mod=Sum%11
    Digit11=11-Mod
    if Digit11==10:
       Digit11='X'
    ISBNNumber=str(ISBN)+str(Digit11)
    print('Your 11 digit ISBN Number is ' + ISBNNumber)

Post a Comment for "Isbn Final Digit Finder"