答えはハードコードされたソリューションではないように計算するにはどうすればよいですか?他のクレジットカード番号を入力したいのであれば、その新しいクレジットカードの結果をどのように返すことができますか?また、私は1つのxリストを作成する方法ではなく、2で分割された値を今持っている方法で作成することができますか?クレジットカードの検証 - ハードコードされていない値を返す
はまたここに参照のために元の質問です:多次元配列としてクレジットカード番号を取るプログラムを実装するのLuhnの式3を用い
クレジットカード番号が検証され(あなたはそれが正確で構成されて取ることができます値がのリストを返します。有効なカード番号であれば、それ以外の場合は無効な場合はが無効です。
有効性テストを実行する1つの方法は、次のとおりです。
1.チェック桁である右端の桁から、左に移動し、2桁目の値を2倍します。この2倍演算の積が9より大きい場合(例えば、8 2 = 16)、積の桁を合計する(例えば、16:1 + 6 = 7,18:1 + 8 = 9)。
2.すべての桁の合計を取ってください。
3.合計が10で割り切れる場合、その数はLuhnの式に従って有効です。それ以外の場合は有効ではありません。注:カード番号は、文字列(数字などを抽出するためにインデックスとスライスを使用)や整数(数字を操作するために整数除算と剰余を使用)としてマニピュレートすることができます。
マイスクリプト:
import numpy as py
x = [[7,1],[6,3],[4,5],[6,2],[7,8],[3,4],[6,8],[3,9]] #credit card numbers
x2 = np.array(x)
evryothernum = x2[:,1] #returns every other number/every seconds digit
evryothernum2 = np.multiply(evryothernum,2)
sumdigits = []
def card_validate(x):
evryothernum = x2[:,1] #valid
evryothernum2 = np.multiply(evryothernum,2) #multiplys evryothernum by 2
b=np.sort(evryothernum2, axis = None) #sorts the evryothernum2 array in order
b2 = np.array(b)
b3 = b2[4:8] #shows the highest values aka greater than 9
b3
b3 = [1,7,7,9]
newb3 = np.sum(b3)
newx2 = np.sum(x2[:,0])
total = np.sum(newb3+newx2)
if ((total % 10) == 0):
print "Valid"
else:
print "Invalid"
return card_validate()
は、numpyのせずにこれを行うための簡単な方法はありますか?
あなたがしているのいくつかの質問をする。それを分割し、関連するコード行でそれぞれに焦点を合わせます。小さな部品にはあなたの完全なソリューションは必要ありません – Gibolt
また、numpyはLuhn'sを実装するための大過剰の過剰です。 –
これはnumpyなしでこれを行うより簡単な方法ですか? – derickim