嘿,我正在做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])