python – Luhns算法

嘿,我正在做Luhn的学校作业算法.

一些输出以正确的方式出现;但有些人不是.

0004222222222222给了我一共44,

0378282246310005给了我一个48,

举几个例子.

我知道我的代码不是最干净的,因为我是新手,但如果有人能够确定我在哪里得到我的错误,我真的很感激

这是我的代码:

cardNumber = input( "What is your card number? ")
digit = len(cardNumber)
value = 0
total = 0
while ( len( cardNumber ) == 16 and digit > 0):
    # HANDLE even digit positions
    if ( digit % 2 == 0 ):
        value = ( int( cardNumber[digit - 1]) * 2 )
        if( value > 9 ):
            double = str( value )
            value = int( double[:1] ) + int( double[-1] )
            total = total + value
            value = 0
            digit = digit - 1
        else:
            total = total + value
            value = 0
            digit = digit - 1
    # HANDLE odd digit positions
    elif ( digit % 2 != 0):
        total = total + int( cardNumber[digit - 1] )
        digit = digit - 1

最佳答案 你几乎做对了.只有最后一个数字(或后面的第一个数字)才应被视为16位数卡的奇数.所以你应该设置:

digit = len(cardNumber) - 1

然后你的while条件应该停在> = 0(包括第零项);请注意,len(cardNumber)== 16是冗余的,因为卡的长度是恒定的:

while digit >= 0:

最后,您对信用卡号的索引将不再需要减1:

value = int(cardNumber[digit]) * 2
...
...
total = total + int(cardNumber[digit])
点赞