首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 8代码不总计

Python 8代码不总计
EN

Stack Overflow用户
提问于 2016-01-25 12:32:00
回答 3查看 818关注 0票数 0

嗨,我已经做了一段时间的实验,一次总共有7个变量。我试着计算GTIN 8码的第8位。我已经尝试了很多东西,到目前为止我使用的是浮点数。我不知道它能做什么,但人们说要用它。我需要把1,3,5,7的数字乘以3,2,4,6的数字乘以1,然后找出它们加在一起的总和。我到处找遍了,什么也找不到。一切都会有帮助的。谢谢本

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-25 12:42:11

快速解决方案:

代码语言:javascript
复制
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]))

解释:

代码语言:javascript
复制
# 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
EN

Stack Overflow用户

发布于 2017-01-13 13:03:04

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

代码语言:javascript
复制
cd = lambda x: -sum(int(v) * [3,1][i%2] for i, v in enumerate(str(x)[::-1])) % 10

解释:

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

测试用例

代码语言:javascript
复制
## 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
票数 0
EN

Stack Overflow用户

发布于 2017-05-24 09:22:53

代码语言:javascript
复制
`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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34992690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档