即使我看不出爲什麼,我的代碼輸出也是不正確的。如果有人能夠解釋我的問題,我會非常感激。在python中驗證信用卡號碼
對於作業,我們允許用戶輸入15或16位數的信用卡號碼並返回給定的號碼是否有效。
我們正在使用Luhn的測試來驗證數字,這是我的代碼不工作的地方。卡號4222222222222220應該返回有效,但我的工作不正常,我相信它,因爲我不完全理解代碼的意圖。
盧恩的測試:讓我們說,信用卡號碼作出的以下數字:
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
最後一位D0是Luhn算法中的校驗數字。該算法去如下:
乘所有的奇數位D1,D3,D15 ......由2
總和每種產品的數字。
現在添加所有的偶數位d0,... d14和奇數位的單數位產品。
如果最後的總和可以被10整除,那麼信用卡是有效的,否則它是無效的。
我的代碼是:
def len_check(x):
length = len(str((x)))
if (length == 15) or (length == 16):
return True
else:
return False
def is_valid(x):
card = x
num_list= list((str(card)))
sum_odd = 0
sum_even = 0
even_count = 0
odd_count = 0
total_sum = 0
length = 0
for i in num_list:
length += 1
print(length)
count = 0
if length == 16:
odd_count = 15
even_count = 14
if length == 15:
odd_count = 13
even_count = 14
print(even_count)
print(odd_count)
while (count <= length-2):
print('even count', even_count)
print('D-even', num_list[even_count])
sum_even += int(num_list[even_count])
even_count -=2
print('sum even', sum_even)
print('odd count', odd_count)
print('D-odd', num_list[odd_count])
prod = 2 * int(num_list[odd_count])
sum_odd += prod
odd_count -=2
print('sum odd', sum_odd)
count +=2
total_sum = sum_odd + sum_even
print('total sum', total_sum)
if total_sum % 10 == 0:
return True
else:
return False
def main():
cc_num = int(input('Enter at 15 or 16-digit credit card number: '))
if not len_check(cc_num):
print('Not a 15 or 16-digit number')
else:
if not is_valid(cc_num):
print('Invalid credit card number')
else:
print('valid card number')
main()
您可能想突出顯示您的實際問題,在所有情況中很難發現。 – ShadowRanger
讓我試着幫忙:你有什麼嘗試?你有沒有確定'sum_even'和'sum_odd'是你期望得到的款項?怎麼樣? – alf
就我所瞭解的程序的要求而言,就像我在手工操作時一樣,我是對的,我相信問題在於我理解測試應該如何工作。 – Rsherrill