【问题标题】:Python EAN-13 Barcode generator script overflowPython EAN-13 条码生成器脚本溢出
【发布时间】:2018-06-29 10:46:56
【问题描述】:

我有一个脚本可以生成所有可能的 EAN-13 条形码。问题是它没有运行,因为我相信我得到了算术溢出。是否可以对此进行优化,以便我可以获得所有可能的值? EAN-13 条形码看起来像 000000000000110000000000000293401925347 等。总组合应为 10^13:

for k in range(13, 14):
    for number in list(product(range(13), repeat=k)):
        barcode = "".join(map(str, number))
        print(barcode)

【问题讨论】:

  • EAN13 的最后一个字符不能有校验位(“X”)吗?
  • 不明白你的问题。
  • 你的算法只考虑数字。 (例如 EAN13 的 ISBN,当数字本身恰好为零时,可以将“X”作为最后一个字符(其校验位)。这只是您的 alg 的一个想法:en.wikipedia.org/wiki/International_Standard_Book_Number
  • 嗯好的明白了。我现在只考虑 13 位数的数字。我已经遇到了问题。如果您可以为两者都提供算法,那就太好了

标签: python python-2.7 computer-science


【解决方案1】:

您的代码存在一些问题。让我们看看与

的区别
from itertools import product

k = 13

for number in product(range(10), repeat = k):
    barcode = "".join(map(str, number))
    print(barcode)

1) k 的循环位于 range(13, 14) 中。这与k=13相同
2)您的range(13) 错误,因为我们只想将数字0 连接到9
3) 你写了list(product()。这将创建一个包含 10^13 个数字的列表,这需要大量的空间和时间来生成。而是直接迭代 itertools 对象以避免这种情况。如果您想了解更多关于迭代器和生成器的信息,请查看introduction to generators。 Tldr:优点:它们只产生下一个元素,当被问到时,节省内存空间和元素的计算时间,我们不使用。缺点:它们耗尽,即一旦使用了生成的元素,生成器就不能再访问它了。

【讨论】:

  • 好的,谢谢,但是如果您设置 K= 3,您的工具只会迭代 1->999。但是,我需要它包含诸如 001、010、100、101、110、011 之类的值,因为我做了这个列表。
  • 我不明白你的问题。我的输出给了我 k = 3 000 001 002 003 004...
  • 对不起,我很困惑。 :O 我的数学完全偏离了。
猜你喜欢
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多