-4

当我用我的代码检查 ISBN(DIGIT) 时:check_digit_13(2000003294107)

def check_digit_13(isbn):
    assert len(isbn) == 12
    sum = 0
    for i in range(len(isbn)):
        c = int(isbn[i])
        if i % 2: w = 3
        else: w = 1
        sum += w * c
    r = 10 - (sum % 10)
    if r == 10: return '0'
    else: return str(r)

错误 :

Traceback (most recent call last):
  File "parser.py", line 16, in <module>
    lk.run(document)
  File "/data/www/crons/lk/parser.py", line 33, in run
    field = lkmapper.all(row, document)
  File "/data/www/crons/mappers/lk.py", line 5, in all
    print isbn.check_digit_13(field[0])
  File "/data/www/crons/libs/isbn.py", line 13, in check_digit_13
    assert len(isbn) == 12
AssertionError
4

2 回答 2

29
  • 停止。
  • 思考。
  • 口译员想告诉你什么?
  • 断言错误?
  • 哪个断言?
  • 您的代码中只有一个。
  • 回溯甚至会告诉你是哪一个。

检查函数的输入。它是一个字符串吗?然后数字数。多少?12?我数了13。

于 2013-07-11T14:30:04.990 回答
6

assert len(isbn) == 12应该是assert len(isbn) == 13。毕竟,当前的 ISBN 代码长度为 13 位,您的示例输入也是如此。也许你很困惑,因为索引从 0 开始,但长度就是长度,所以它是 13。

于 2013-07-11T14:36:52.313 回答