Как мне вычислить ответ, чтобы ответ не был жестко запрограммированным решением? Например, если бы я хотел указать номер другой кредитной карты, как я могу вернуть результат этой новой кредитной карты? Кроме того, как я могу создать один список x, а не тот, который у меня есть сейчас, со значениями, разделенными на 2?
Также здесь оригинальный вопрос для справки:
Номера кредитных карт проверяются по формуле Луна 3. Реализуйте программу, которая принимает номера кредитных карт в виде многомерного массива (можно предположить, что он состоит ровно из 16 столбцов) и возвращает список со значениями Действительно. если это действительный номер карты, и Invalid в противном случае.
Один из способов выполнить проверку достоверности заключается в следующем:
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?