Я начинающий ученик Python, и сейчас я работаю над алгоритмом Луна, чтобы проверить валидацию кредитной карты. Я написал большую часть кода, но я застрял с двумя ошибками, которые я получил, когда 1-й номер равен num, перед ссылкой. Второй я получаю объект типа '_io.TextIOWrapper' не имеет len(). Дальнейшая помощь/руководство будут высоко оценены.Проверка кредитной карты Python
Эти шаги для Лун алгоритма (mod10 Check)
- Двойной каждой второй цифры справа налево. Если это «удвоение» приводит к двузначному числу, добавьте двузначный номер , чтобы получить цифру.
- Теперь добавьте все однозначные цифры из шага 1.
- Добавить все цифры в нечетных местах справа налево в номере кредитной карты.
- Подведите итоги к шагам 2 & 3.
- Если результат шага 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()
Вы должны предоставить отслеживающий, а не только сообщение об ошибке –
'даже = checkSecondDigits (NUM)' ... Проверить эту строку. Что такое num? Это ваша первая ошибка –
Traceback (самый последний вызов последнего): строка 58, в основной() линии 48, в основных даже = checkSecondDigits (Num) UnboundLocalError: локальная переменная 'Num' обращаться до присвоения –