2016-09-01 21 views
1

LuhnアルゴリズムをPythonで実装しようとしています。ここに私のコードはLuhnアルゴリズムによるクレジットカード番号の検証Python

def validate(n): 
    if len(str(n)) > 16: 
     return False 
    else: 
     if len(str(n)) % 2 == 0: 
      for i in str(n[0::2]): 
       digit = int(str(n[i])) * 2 
       while digit > 9: 
        digit = sum(map(int, str(digit))) 
      dig_sum = sum(map(int, str(n))) 
      return True if dig_sum % 10 == 0 else False 
     elif len(str(n)) % 2 != 0: 
      for i in str(n[1::2]): 
       digit = int(str(n[i])) * 2 
       while digit > 9: 
        digit = sum(map(int, str(digit))) 
      dig_sum = sum(map(int, str(n))) 
      return True if dig_sum % 10 == 0 else False 

である私は、完全なエラーメッセージなしで伝えるのは難しいですが、あなたはインデックスを置くいくつかの場所で混乱しているので、それは可能性があるエラーに

TypeError: 'int' object has no attribute '__getitem__ 
+2

[Luhn Algorithm]のWikipediaページにPythonの実装があります(https://en.wikipedia.org/wiki/Luhn_algorithm#Verification_of_the_check_digit) – mhawke

+0

どのように 'n'を渡していますか?整数として?もしそうなら、最初のforループを見てください。ここでは、 'digit = int(str(n [i]))* 2'という表現があります。 'n'が単純な整数なら、これはあなたのエラーを生成します。文字列に変換する前に数字をインデックス化することはできません。 – meetaig

+0

http://stackoverflow.com/a/29197921/2141635 –

答えて

1

を得続けますfor i in str(**n[1::2]**)digit = int(str(**n[i]**)) * 2

それだけで一時変数n_str = str(n)を作成することで処理し、STR(N)の代わりにそれを使用するには良い方法何度も繰り返し:あなたは、例えば、文字列の変換を、どこに置きましたか。

関連する問題