首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信贷中的NameError - pset6 CS50x

信贷中的NameError - pset6 CS50x
EN

Stack Overflow用户
提问于 2020-04-15 20:31:44
回答 1查看 169关注 0票数 0

我是Python的新手。我唯一的Python语言背景是CS50(第6周)。我正在尝试实现来自pset6的信用。在这种情况下,我们必须实现Luhn算法。

但是,我得到了下面提到的错误,我不能理解为什么:

代码语言:javascript
复制
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

下面是我的代码:

代码语言:javascript
复制
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()

我使用的测试用例是(以及正确的输出):

代码语言:javascript
复制
$ python credit.py
Number: 378282246310005
AMEX

另外,请告诉我我是否正确使用了exit()

EN

回答 1

Stack Overflow用户

发布于 2020-04-15 23:29:02

这里使用i作为card_n数组的索引。但是你忘了给它下定义。

定义它并将其赋值,然后再使用。

sum2 = sum(int(c) for c in str(2 * card_n[i])

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61228795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档