0

私はpython 3で作業しており、10桁のISBN番号を取得し、それにメソッドを適用して11番目の番号を見つけるプログラムを作成しています。

これが私の現在のコードです

ISBN=input('Please enter the 10 digit number: ')

while len(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: '))
    continue


else:

    Digit1=int(ISBN[0])*11
    Digit2=int(ISBN[1])*10
    Digit3=int(ISBN[2])*9
    Digit4=int(ISBN[3])*8
    Digit5=int(ISBN[4])*7
    Digit6=int(ISBN[5])*6
    Digit7=int(ISBN[6])*5
    Digit8=int(ISBN[7])*4
    Digit9=int(ISBN[8])*3
    Digit10=int(ISBN[9])*2
    Sum=(Digit1+Digit2+Digit3+Digit4+Digit5+Digit6+Digit7+Digit8+Digit9+Digit10)
    Mod=Sum%11
    Digit11=11-Mod
    if Digit11==10:
       Digit11='X'
    ISBNNumber=str(ISBN)+str(Digit11)
    print('Your 11 digit ISBN Number is ' + ISBNNumber)

変数名の「桁」の後の数字が1(または楽になる場合はゼロ)から増加し、角括弧内の数字が0から増加し、乗算数が減少するように、ある種のループを作成したい11から2へ。

このコードをより効率的な方法で実行する方法はありますか?

4

2 に答える 2

2

これはあなたが望むことをするべきだと思います。

def get_isbn_number(isbn):
    digits = [(11 - i) * num for i, num in enumerate(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

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

2 行目の説明:

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

次のように書き出すことができます。

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

コードの 1 行バージョンを理解するために調べる必要がある用語:
map
enumerate
list の理解

于 2013-03-21T22:02:46.980 に答える
0
ISBN=int(input('Please enter the 10 digit number: ')) # Ensuring ISBN is an integer

while len(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: '))
    continue

else:
    Sum = 0
    for i in range(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)
于 2013-03-21T21:56:11.267 に答える