2016-11-19 147 views
-3

我是一名初學者Python學習者,目前我正在研究Luhn Algorithm以檢查信用卡驗證。我寫了大部分的代碼,但是我遇到了2個錯誤,我得到的第一個是num在分配之前被引用。第二個我得到的是'_io.TextIOWrapper'類型的對象沒有len()。進一步的幫助/指導將不勝感激。Python信用卡驗證

這些是盧恩算法(MOD10校驗)

  1. 雙從右到左每秒位數的步驟。如果此「加倍」結果爲兩位數字,請添加兩位數字 以獲得單個數字。
  2. 現在添加步驟1中的所有單個數字號碼。
  3. 在信用卡號碼中從右至左添加奇數位置的所有數字。
  4. 總結步驟2的結果& 3.
  5. 如果步驟4的結果可以被10整除,則卡號有效;否則,它是無效的。

這裏是我的輸出應該是

Card Number   Valid/Invalid 
-------------------------------------- 
3710293    Invalid 
5190990281925290 Invalid 
3716820019271998 Valid 
37168200192719989 Invalid 
8102966371298364 Invalid 
6823119834248189 Valid 

這裏是代碼。

def checkSecondDigits(num): 
    length = len(num) 
    sum = 0 
    for i in range(length-2,-1,-2): 
     number = eval(num[i]) 
     number = number * 2 
     if number > 9: 
      strNumber = str(number) 
      number = eval(strNumber[0]) + eval(strNumber[1]) 
      sum += number 
     return sum 

def odd_digits(num): 
    length = len(num) 
    sumOdd = 0 
    for i in range(length-1,-1,-2): 
     num += eval(num[i]) 
    return sumOdd 

def c_length(num): 
    length = len(num) 
    if num >= 13 and num <= 16: 
    if num [0] == "4" or num [0] == "5" or num [0] == "6" or (num [0] == "3" and num [1] == "7"): 
     return True 
    else: 
     return False 


def main(): 
    filename = input("What is the name of your input file? ") 
    infile= open(filename,"r") 
    cc = (infile.readline().strip()) 
    print(format("Card Number", "20s"), ("Valid/Invalid")) 
    print("------------------------------------") 
    while cc!= "EXIT": 
     even = checkSecondDigits(num) 
     odd = odd_digits(num) 
     c_len = c_length(num) 
     tot = even + odd 

     if c_len == True and tot % 10 == 0: 
      print(format(cc, "20s"), format("Valid", "20s")) 
     else: 
      print(format(cc, "20s"), format("Invalid", "20s")) 
     num = (infile.readline().strip()) 

main() 
+1

你應該提供回溯,不只是錯誤信息 –

+0

'甚至= checkSecondDigits(NUM)'...查看這條線。什麼是num?這是你的第一個錯誤 –

+0

回溯(最近通話最後一個): 線58,在 的main() 線48,在主 甚至= checkSecondDigits(NUM) UnboundLocalError:局部變量 'NUM' 分配 –

回答

1

你只是忘了初始化NUM

def main(): 
    filename = input("What is the name of your input file? ") 
    infile= open(filename,"r") 
    # initialize num here 
    num = cc = (infile.readline().strip()) 
    print(format("Card Number", "20s"), ("Valid/Invalid")) 
    print("------------------------------------") 
    while cc!= "EXIT": 
     even = checkSecondDigits(num) 
     odd = odd_digits(num) 
     c_len = c_length(num) 
     tot = even + odd 

     if c_len == True and tot % 10 == 0: 
      print(format(cc, "20s"), format("Valid", "20s")) 
     else: 
      print(format(cc, "20s"), format("Invalid", "20s")) 
     num = cc = (infile.readline().strip()) 
+0

他實際上已經把它初始化到了else之下。 – Onilol

+0

你是一個拯救生命的兄弟。非常感謝你 –

+0

可以將cc重命名爲num –