ISBN只接受数字(python)

时间:2014-02-01 12:05:07

标签: python numbers isbn

我已经在stackoverflow上的一些用户的帮助下创建了一个代码。我在代码中发现了一个问题。我的代码存在的问题是,当用户输入的ISBN错误超过两次时,它会编码错误

这是我的代码:

isbn= input('Please enter the 10 digit number: ')
while not(len(isbn) == 10 and isbn.isdigit()):
    print('Please make sure you have entered a number which is exactly 10 characters long.')
    isbn=input('Please enter the 10 digit number: '))
    continue

else:
    total= 0
   for digit in isbn: total += int(digit)
    calculation=total%11
    digit11=11-calculation
    if digit11==10:
       digit11='X'
    iSBNNumber=str(isbn)+str(digit11)
    print('Your 11 digit ISBN Number is ' + iSBNNumber)

3 个答案:

答案 0 :(得分:2)

while循环中,以下代码尝试将输入字符串转换为int

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

int个对象没有isdigit个方法;导致AttributeError

>>> isbn = 12345
>>> isbn.isdigit()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'isdigit'

len(int)导致TypeError

>>> len(isbn)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

删除int(..)来电。

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

答案 1 :(得分:1)

摆脱while循环中的int。事实上,你想在检查它是一个数字之后,将ISBN转换为仅的数字。

此外,您既不需要else也不需要continue语句:

isbn= input('Please enter the 10 digit number: ')
while not(len(isbn) == 10 and isbn.isdigit()):
    print('Please make sure you have entered a number which is exactly 10 characters long.')
    isbn=input('Please enter the 10 digit number: ')

total= 0
for i in range(len(isbn)):
    total= int(isbn[i])
calculation=total%11
digit11=11-calculation
if digit11==10:
   digit11='X'
iSBNNumber=str(isbn)+str(digit11)
print('Your 11 digit ISBN Number is ' + iSBNNumber)

我不知道所实现的算法是否正确,但上面的代码将会运行。

答案 2 :(得分:0)

这是完全有效的答案

isbn= input('Please enter the 10 digit number: ')
while not(len(isbn) == 10 and isbn.isdigit()):
    print('Please make sure you have entered a number which is exactly 10 characters long.')
    isbn=input('Please enter the 10 digit number: ')

total= 0
for i in range(len(isbn)):
    total= int(isbn[i])
calculation=total%11
digit11=11-calculation
if digit11==10:
   digit11='X'
iSBNNumber=str(isbn)+str(digit11)
print('Your 11 digit ISBN Number is ' + iSBNNumber)