如何计算答案以使答案不是硬编码的解决方案?就像我想输入另一个信用卡号一样,我该如何返回该新信用卡的结果?另外,如何创建一个 x 列表,而不是像现在这样将值除以 2 的方式?
另外这里是原始问题供参考:
信用卡号码使用 Luhn 的公式 3 进行验证。实现一个程序,将信用卡号码作为一个多维数组(您可以假设它正好由 16 列组成),并返回一个包含值的列表Valid如果它是有效的卡号,否则无效。
进行有效性测试的一种方法如下:
1. 从最右边的数字,即校验位,向左移动,每隔一个数字加一倍;如果这个加倍运算的乘积大于 9(例如,8 2 = 16),则将乘积的数字相加(例如,16:1 + 6 = 7、18:1 + 8 = 9)。
2. 取所有数字的总和。
3.若总数能被10整除,则根据卢恩公式该数有效;否则无效。注意:您可以将卡号操作为字符串(使用索引和切片来提取数字等)或整数(使用整数除法和余数来操作数字)。
我的脚本:
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 的情况下做到这一点?