我是Python的新手。我唯一的Python语言背景是CS50(第6周)。我正在尝试实现来自pset6的信用。在这种情况下,我们必须实现Luhn算法。
但是,我得到了下面提到的错误,我不能理解为什么:
Traceback (most recent call last):
File "credit.py", line 57, in <module>
main()
File "credit.py", line 9, in main
if IfAmex(arr_number):
File "credit.py", line 27, in IfAmex
if Luhn(card_n):
File "credit.py", line 50, in Luhn
sum2 = sum(int(c) for c in str(2 * card_n[i]) for i in range(1, len(card_n), 2))
NameError: name 'i' is not defined下面是我的代码:
from sys import exit
from cs50 import get_int
def main():
number = get_int("Number: ")
# Converting the number into a list
arr_number = [int(x) for x in str(number)]
if IfAmex(arr_number):
print("AMEX")
exit(0)
elif IfMasCard(arr_number):
print("MASTERCARD")
exit(0)
elif IfVisa(arr_number):
print("VISA")
exit(0)
else:
print("INVALID")
exit(0)
def IfAmex(card_n):
if not len(card_n) == 15:
return False
if not (card_n[0] * 10 + card_n[1]) in [34, 37]:
return False
if Luhn(card_n):
return True
def IfMasCas(card_n):
if not len(card_n) == 16:
return False
if not (card_n[0] * 10 + card_n[1]) in range(51, 56):
return False
if Luhn(card_n):
return True
def IfVisa(card_n):
if not len(card_n) in [13, 16]:
return False
if not card_n[0] == 4:
return False
if Luhn(card_n):
return True
def Luhn(card_n):
# Reversing the digits
card_n = card_n[::-1]
sum1 = sum(card_n[::2])
sum2 = sum(int(c) for c in str(2 * card_n[i]) for i in range(1, len(card_n), 2)) # The Error Line
luhnsum = sum1 + sum2
return luhnsum % 10 == 0
if __name__ == '__main__':
main()我使用的测试用例是(以及正确的输出):
$ python credit.py
Number: 378282246310005
AMEX另外,请告诉我我是否正确使用了exit()。
发布于 2020-04-15 23:29:02
这里使用i作为card_n数组的索引。但是你忘了给它下定义。
定义它并将其赋值,然后再使用。
sum2 = sum(int(c) for c in str(2 * card_n[i])
https://stackoverflow.com/questions/61228795
复制相似问题