Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python HP CodeWars-UPC校验位算法_Python - Fatal编程技术网

Python HP CodeWars-UPC校验位算法

Python HP CodeWars-UPC校验位算法,python,Python,我正在通过解决前几年的问题为HP CodeWars 2014做准备,但我陷入了困境,希望有人能帮助我 以下是UPC校验位算法: 首先,将奇数位置的所有数字相加,并将结果乘以三 然后,将偶数位置的数字添加到结果中 接下来,求和的模10。模计算总和除以10后的余数 最后,如果余数不是零,从10中减去它 输入 输入的第一行包含后面的UPC数。这个 每个UPC的数字将用一个空格分隔 6 0 1 2 3 4 5 6 7 8 9 0 0 3 6 0 0 0 2 9 1 4 5 0 7 3 8 5

我正在通过解决前几年的问题为HP CodeWars 2014做准备,但我陷入了困境,希望有人能帮助我

以下是UPC校验位算法:

  • 首先,将奇数位置的所有数字相加,并将结果乘以三
  • 然后,将偶数位置的数字添加到结果中
  • 接下来,求和的模10。模计算总和除以10后的余数
  • 最后,如果余数不是零,从10中减去它
输入

输入的第一行包含后面的UPC数。这个 每个UPC的数字将用一个空格分隔

6

0 1 2 3 4 5 6 7 8 9 0

0 3 6 0 0 0 2 9 1 4 5 

0 7 3 8 5 2 0 0 9 3 8 

0 7 0 7 3 4 0 5 3 1 6

0 4 1 2 2 0 1 8 9 0 4 

0 3 7 0 0 0 2 0 2 1 4 
输出

对于每个UPC,程序必须打印UPC,包括计算出的 检查数字。每个UPC的数字应以单个空格分隔

0 1 2 3 4 5 6 7 8 9 0 5

0 3 6 0 0 0 2 9 1 4 5 2

0 7 3 8 5 2 0 0 9 3 8 5

0 7 0 7 3 4 0 5 3 1 6 0

0 4 1 2 2 0 1 8 9 0 4 5

0 3 7 0 0 0 2 0 2 1 4 1
这是我的程序,但似乎在某个地方失败了。请帮我找到错误

n=input()
for i in range(1,n+1):
    seq=raw_input()
    ar=seq.split(" ")
    l=len(ar)
    res=0
    sume=0
    sumo=0
    for k in range(0,l):
        if k%2==0:
            sume+=int(ar[k])
        else:
            sumo+=int(ar[k])
    res=(sumo*3+sume)%10
    if res!=0:
        res=10-res
    print seq,res
错误


输出不符合预期。我得到了错误的输出,我猜是一些逻辑错误

您的奇偶校验是错误的。如果你改变

if k%2==0:
    sume+=int(ar[k])
else:
    sumo+=int(ar[k])


您的代码生成正确的值。我相信描述假设第一个数字的编号为“1”而不是“0”。

什么是“某些地方[sic]”的意思?错误(提供完整的回溯)?意外输出(提供输入以及预期和实际输出)?我已重新构建了问题的框架。现在请告诉我我遗漏了或弄乱了哪种逻辑。:。。。提供输入以及预期和实际输出。此外,您还应阅读,例如,点击所有这些问题的问题链接!:PNo,谢谢-请在问题本身中输入所有适当的信息。欢迎使用堆栈溢出!我相信,除了代码,您还可以解释您所做的与OP不同的事情。
if k%2==0:
    sumo+=int(ar[k])
else:
    sume+=int(ar[k])
n=input()
for i in range(1,n+1):
seq=raw_input()
ar=seq.split(" ")
l=len(ar)
res=0
sume=0
sumo=0
for k in range(0,l):
    if k%2==0:
        sume+=int(ar[k])
    else:
        sumo+=int(ar[k])
res=(sumo*3+sume)%10
if res!=0:
    res=10-res
print seq,res