我已经在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)
答案 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)