Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ISBN最终数字查找器_Python_Isbn - Fatal编程技术网

Python ISBN最终数字查找器

Python ISBN最终数字查找器,python,isbn,Python,Isbn,我正在使用Python3,我正在制作一个程序,它将接受一个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(in

我正在使用Python3,我正在制作一个程序,它将接受一个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)
我想创建一种循环,使变量名的“Digit”后面的数字从1开始增加(如果方便的话,也可以是零),方括号中的数字从0开始增加,乘法从11减少到2


有没有更有效的方法来编写此代码?

我认为这应该满足您的要求

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)
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
第二行解释:

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
您应该查找以了解代码的单行版本的术语:



是的,这段代码很适合列表理解:(加上求和功能)。你为什么不为
数字使用数组呢?@user2197058:请不要破坏你的问题——这会从人们花时间研究的答案中删除价值。“我需要删除它”意思是,这是一个家庭作业,我不想让我的老师知道我使用了堆栈溢出?@user2197058:你可能不想感谢我。我认为那些要求他人帮助掩盖欺骗行为的人不应该得到帮助。我不打算再亲自修复你的破坏行为的唯一原因是,信任的用户卷入编辑大战被认为是一种糟糕的形式。第二行是什么意思?你能解释一下吗