Luhn校验和方法;分开两个数字并找到该列表的总和

时间:2016-02-12 14:28:22

标签: python list luhn

我目前正在尝试使用luhn方法来确定信用卡在python中是否有效,这是我到目前为止所拥有的:

print('What is your Credit Card number? :) (please put a space between each number)')
a = [int(x) for x in input().split()]

lengthy = len(a)
print(lengthy)
a.reverse()
print(a)

listx2 = []
listx1 = []
for x in range(len(a)):
    modulus = x % 2
    print(x, a[x])
    if modulus != 0:
        listx2.append(a[x]*2)
    else:
        listx1.append(a[x])
print(listx2)
print(listx1)

我不知道如何进行下一步,即将数字的所有数字的总和乘以2。(listx2)我用luhn方法查看了不同的程序,但我不能似乎选择了那一部分。谢谢!

2 个答案:

答案 0 :(得分:1)

这是我对Luhn算法的解释。

def luhn(sequence):
digits = [int(digit) for digit in str(sequence)] # converts a full string of nums to a list comp of individual numbers
odd = digits[-1::-2] # string stepping (-1) indicates last item in list (-2) means to travel back another 2
even = digits[-2::-2]
checksum = 0
checksum += sum(odd)
evenmod = []
for digit in even:
    if digit * 2 > 9:
        digit = digit * 2
        digit = int(str(digit)[0]) + int(str(digit)[1])
    else:digit = digit * 2
    evenmod.append(digit)
checksum += sum(evenmod)
if checksum % 10 == 0:
    return True
else:
    return False


print luhn(378282246310005)
print luhn(111111111111111)
print luhn(4751290083628479)
print luhn(5573485043994670)

将偶数和奇数的单独分隔为单独的列表,然后使用for语句循环遍历列表,将列表条目乘以2。

注意用于解决问题的if语句(例如)8 * 2 = 16.

答案 1 :(得分:0)

使用sum

summed_x2 = sum(listx2)