Python 我的程序似乎将所有内容都用作校验位,除了0,它将返回无效,即使它是有效的?
例如,输入Python 我的程序似乎将所有内容都用作校验位,除了0,它将返回无效,即使它是有效的?,python,Python,例如,输入0-7487-4459-2将返回有效,但1-841-46202-0将返回无效,即使其有效???我真的不知道该怎么做,但我已经测试过了,看看什么是11%11,它的0所以0==0应该返回True,因此是有效的??我真的受不了这个 while True: # infinite loop until quit answer = input("Enter ISBN or enter q to quit") # enter number if answer == "q" or answer =
0-7487-4459-2
将返回有效,但1-841-46202-0
将返回无效,即使其有效???我真的不知道该怎么做,但我已经测试过了,看看什么是11%11
,它的0所以0==0
应该返回True,因此是有效的??我真的受不了这个
while True: # infinite loop until quit
answer = input("Enter ISBN or enter q to quit") # enter number
if answer == "q" or answer == "Q": # quit
exit()
else:
isbn = answer
temp = "" # temporary
answer = "" # set as isbn and reset 'answer'
for x in range(len(isbn)):
if ord(isbn[x]) == 45:
print("", end="") # print nothing when dash
else:
temp += isbn[x] # add new code to temp
isbn = temp # reset temp
temp = ""
# RUN CHECKS ON ISBN
if (len(isbn)) == 10:
print("", end="")
else: # check length
print("Incorrect length for isbn")
exit()
# CHECK DIGITS
if isbn.isdigit() == True:
print("", end="")
else:
print("Non number detected")
exit()
print(isbn)
check = (isbn[len(isbn) - 1]) # add the last digit as check
isbn = isbn[:-1] # remove last digit as its check
total = 0
multi = 10
for x in range(len(isbn)):
temp = int(isbn[x]) # set it as int
total += (temp * multi) # times by multiplier and add to total
multi -= 1 # take one
answer = (11 - (total % 11))
print(answer) # modulo 11
print(check)
if int(check) == answer: # check and print valid if valid
print("Valid")
else:
print("Invalid")
控制台输出:
Enter ISBN or enter q to quit1-841-46202-0
1841462020
11
0
Invalid
Enter ISBN or enter q to quit
answer=(11-(总计%11))
只能生成范围为1到11(包括1到11)的结果,因此任何结果都不可能与检查数字0匹配。请尝试answer=-total%11
,当您的原始答案为11时,它会给出0
任何一个版本都可以产生10作为答案,但不能匹配一个十进制数字。事实上,ISBN校验位是一个基数为11的数字,额外的可能值表示为“X”。当答案为10时,您需要添加一个特例来接受“X”-否则,您将拒绝大约9%的所有可能的ISBN。answer=(11-(总计%11))
只能产生范围为1到11(包括11)的结果,因此任何结果都不可能匹配0的校验位。请尝试answer=-total%11
,当您的原始答案为11时,它会给出0
任何一个版本都可以产生10作为答案,但不能匹配一个十进制数字。事实上,ISBN校验位是一个基数为11的数字,额外的可能值表示为“X”。当答案为10时,您需要添加一个特例来接受“X”——否则,您将拒绝所有可能的ISBN的9%。您永远不会执行评估11%11。您计算了整个数字:总数%11。这两项的总数分别为262和187。你所做的计算从11中减去。啊。。。jasonharper刚刚发布了那个部分 要将ISBN的其余部分转换成一个数字,需要做大量的工作。你可以用一句简单的话来解决这个问题:
total = int(isbn[:-1])
您从未执行过评估11%11。您计算了整个数字:总数%11。这两项的总数分别为262和187。你所做的计算从11中减去。啊。。。jasonharper刚刚发布了那个部分 要将ISBN的其余部分转换成一个数字,需要做大量的工作。你可以用一句简单的话来解决这个问题:
total = int(isbn[:-1])
好的,谢谢,好的回答,都很有帮助,而且现在它正在使用X,X和0!好的,谢谢,好的回答,都很有帮助,而且现在它正在使用X,X和0!