-3

我在 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)
4

3 回答 3

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: ')
于 2014-02-01T12:08:05.557 回答
1

int在 while 循环中摆脱它。实际上,您只想确认 ISBN 是数字之后才将其转换为数字。

此外,您既不需要 theelse也不需要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)

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

于 2014-02-01T12:09:00.183 回答
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)
于 2014-02-02T17:22:11.327 回答