【发布时间】:2017-04-02 23:00:03
【问题描述】:
我是一名 Python 初学者,目前正在研究 Luhn 算法来检查信用卡验证。我编写了大部分代码,但是我遇到了 2 个错误,我得到的第一个错误是在分配之前引用了 num。我得到的第二个是'_io.TextIOWrapper'类型的对象没有len()。进一步的帮助/指导将不胜感激。
这些是 Luhn 算法(Mod10 检查)的步骤
- 从右到左每隔一个数字加一次。如果这个“加倍”的结果是两位数,则将两位数相加 获得一位数。
- 现在添加步骤 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()
【问题讨论】:
-
您应该提供回溯,而不仅仅是错误消息
-
even = checkSecondDigits(num)... 检查这一行。什么是数字?这是你的第一个错误 -
回溯(最近一次调用最后一次):第 58 行,在
main() 第 48 行,在 main 中 even = checkSecondDigits(num) UnboundLocalError: 在赋值之前引用了局部变量 'num' -
运行代码时出现此错误
-
检查你的
while,这个num变量来自哪里?
标签: python function validation python-3.x luhn