Python Gtin 8 Code not totaling

时间:2016-01-25 12:32:00

标签: python string

您好我已经尝试了一段时间尝试一次共计7个变量。我正在尝试计算GTIN 8代码的第8个数字。我尝试了很多东西,到目前为止我使用浮动。我不知道它做了什么,但人们说使用它。我需要将1,3,5,7的数字乘以3和2,4,6的数字乘以1.然后找到所有这些数字加在一起的总数。我到处寻找,我找不到任何东西。一切都会有所帮助。谢谢Ben

code = input ("enter 7 digit code? ")
sum1 = 3 * (code[0] + ',')
sum2 = code[1] + ','
sum3 = 3 * (code[2] + ',')
sum4 = code[3] + ','
sum5 = 3 * (code[4] + ',')
sum6 = code[5] + ','
sum7 = 3 * (code[6] + ',')

checksum_value = sum1 + sum2 + sum3+ sum4 + sum5+ sum6 + sum7
b = str(checksum_value)
print(b)

3 个答案:

答案 0 :(得分:1)

快速解决方案:

x = "1234567"
checksum_value = sum(int(v) * 3 if i in (0,2,4,6) else int(v) for (i, v) in enumerate(x[:7]))

# (1*3) + 2 + (3*3) + 4 + (5*3) + 6 + (7*3)
# ==
# 3 + 2 + 9 + 4 + 15 + 6 + 21
# ==
# sum(int(v) * 3 if i in (0,2,4,6) else int(v) for (i, v) in enumerate(x[:7]))

说明:

# Sum the contained items
sum(

    # multiply by three if the index is 0,2,4 or 6
    int(v) * 3 if i in (0,2,4,6) else int(v)

    # grab our index `i` and value `v` from `enumerate()`
    for (i, v) in

    # Provide a list of (index, value) from the iterable
    enumerate(
        # use the first 7 elements
        x[:7]
    )
)

答案 1 :(得分:0)

GS1代码有不同的长度,从GTIN-8(8位)到SSCC(2位应用ID + 18位)。这是一个简单的通用Python公式,适用于任何长度的GS1标识符:

cd = lambda x: -sum(int(v) * [3,1][i%2] for i, v in enumerate(str(x)[::-1])) % 10

说明:

  1. 将输入转换为字符串,因此输入可以是数字或字符串 - 只是一个便利因素。
  2. 反转字符串 - 将3x / 1x模式与可变长度输入对齐的简单方法。
  3. 通过计算i mod 2,基于奇数和偶数输入字符位置选择加权因子。输入字符串中的最后一个字符(字符串被反转后i = 0)得到3x。
  4. 计算负加权和模10.相当于(10 - (sum mod 10)) mod 10方法,如果你完全遵循GS1手动计算大纲,你会得到,但那很难看。
  5. 测试用例

    ## GTIN-8
    >>> cd(1234567)
    0
    >>> cd(9505000)
    3
    
    ## GTIN-12
    >>> cd(71941050001)
    6
    >>> cd('05042833241')
    2
    
    ## GTIN-13
    >>> cd(900223631103)
    6
    >>> cd(501234567890)
    0
    
    ## GTIN-14
    >>> cd(1038447886180)
    4
    >>> cd(1001234512345)
    7
    
    ## SSCC (20 digits incl. application identifier)
    >>> cd('0000718908562723189')
    6
    >>> cd('0037612345000001009')
    1
    

答案 2 :(得分:0)

`enter code here`code = input ("enter 7 digit code? ")
sum1 = 3 * (code[0] + ',')
sum2 = code[1] + ','
sum3 = 3 * (code[2] + ',')
sum4 = code[3] + ','
sum5 = 3 * (code[4] + ',')
sum6 = code[5] + ','
sum7 = 3 * (code[6] + ',')

checksum_value = sum1 + sum2 + sum3+ sum4 + sum5+ sum6 + sum7
b = str(checksum_value)
print(b)