我正在编写一个程序来查找ISBN号中缺少的数字。你必须找到剩下的前9个数字中的11个,如下所示:第一个* 10,第二个数字* 9,第三个* 8,等等。如果此余数等于第10位,则ISBN是正确的。
我有一些代码在问号的空白处放置零,并在零所在的数字中找到索引,并将索引加到总数的1 *,并将其修改为11.然后,如果11的剩余部分不等于第10位,它尝试2 *指数,并继续前进,直到找到正确的数字。但是,执行此最终部分的代码块不会触发,我无法弄清楚原因。
def calculate_missing(x):
tally=1
for item in x:
if item=='?':
break
elif item!='?':
tally+=1
if tally==10:
without=str(x).replace('?','')
if isbncalculate(without)==10:
return 'x'
elif isbncalculate(without)==11:
return '0'
else:
return isbncalculate(without)
#these just find the missing digit if it is the final digit.
multiply=11-tally
x=x.replace('?','0')
lastdig=x[9]
x=x.replace(x[9],'')
time=10
newnum=0
for item in str(x):
item=int(item)
item*=time
newnum+=int(item)
time-=1
otherthing=6
if lastdig=='x' or lastdig=='X':
lastdig=10
elif lastdig=='0':
lastdig='11'
final=newnum+(otherthing*multiply)
answer=final%11
for item in range(0,10):
if answer==lastdig:
#this code won't trigger!
return otherthing
else:
otherthing+=1
最后几行是我正在努力解决的问题。如果我输入calculate_missing('567?545653')
,它应该返回6,但它只返回任何内容。
答案 0 :(得分:0)
替换:
if answer==lastdig:
使用:
if answer==int(lastdig):
即使answer
和lastdig
都相同,但answer
是整数,lastdig
是字符串即可。因此,要么在比较时将answer
转换为字符串,要么将lastdig
转换为整数。这将解决问题。