0

我似乎无法确保 python 模函数正常工作,我尝试了各种数字,但似乎无法得到正确的除法。

国际标准书号

print """
Welcome to the ISBN checker,

To use this program you will enter a 10 digit number to be converted to an International Standard Book Number

"""

ISBNNo = raw_input("please enter a ten digit number of choice") 


counter = 11 #Set the counter to 11 as we multiply by 11 first
acc = 0 #Set the accumulator to 0

开始循环,将字符串中的每个数字乘以递减计数器我们需要将数字视为字符串以获得每个位置

for i in ISBNNo: 
    print str(i) + " * " + str(counter)
    acc = acc + (int(i) * counter) #cast value a integer and multiply by counter
    counter -= 1 #decrement counter
print "Total = " + str(acc)                   

Mod除以11(除以余数

acc = acc % 11
print "Mod by 11 = " + str(acc)

从 11 开始

acc = 11 - acc
print "subtract the remainder from 9 = " + str(acc)

与字符串连接

ISBNNo = ISBNNo + str(acc)
print "ISBN Number including check digit is: " + ISBNNo
4

1 回答 1

0

您的代码大部分是正确的,除了一些问题:

1)如果是 ISBN,您正在尝试计算校验和(最后一位)。这意味着您应该只考虑 9 位数字:

ISBNNo = raw_input("please enter a ten digit number of choice") 
assert len(ISBNNo) == 10, "ten digit ISBN number is expected"
# ...
for i in ISBNNo[0:9]: # iterate only over positions 0..9 
    # ...

2)这里也应该有一个特殊情况:

ISBNNo = ISBNNo + str(acc)
print "ISBN Number including check digit is: " + ISBNNo

您正在做模 11,因此 acc 可以等于 10。ISBN 要求在这种情况下应将“X”用作最后一个“数字”,可以写成:

ISBNNo = ISBNNo + (str(acc) if acc < 10 else 'X')

这是固定代码,带有来自维基百科的示例编号:http : //ideone.com/DaWl6y


回应评论

>>> 255 // 11               # Floor division (rounded down)
23
>>> 255 - (255//11)*11      # Remainder (manually)
2
>>> 255 % 11                # Remainder (operator %)
2

(注意:我使用//which 代表地板除法。在 Python 2 中,您也可以简单地使用,/因为您正在除整数。在 Python 3 中,/始终是真正的除法并且//是地板除法。)

于 2013-04-21T17:26:04.260 回答