python - 这是用 Python 编写 Luhn 算法的最有效方法吗?

标签 python algorithm list luhn

这是我的 Luhn 算法(信用卡检查器)代码。好不好...

card = raw_input("Enter your credit card number here: ")
card = list(str(card))
card = [int(x) for x in card]
check = card[-1]
del(card[-1])
card[::2] = [2*x for x in card[::2]]
for i, x in enumerate(card):
        card[i] = sum(map(int, str(x)))
card = sum(card) * 9
card = list(str(card))
card = [int(x) for x in card]
if card[-1] == check:
    print("Card is valid!")
else:
    print("Card is invalid!")

或者我可以让它更短/更高效吗?

最佳答案

看起来您正在计算校验位的值以检查数字,但您不必这样做。校验位的要点在于,当与其余数字组合时,它会产生一个特定的结果——一个可以被 10 整除的数字。

您可以在一个循环中完成所有操作,无需中间列表,最简单的解释方法是:

card = raw_input("Enter your credit card number here: ")
digit_sum = 0

for i, digit in enumerate(reversed(card)):
    n = int(digit)

    if i % 2 == 0:
        digit_sum += n
    elif n >= 5:
        digit_sum += n * 2 - 9
    else:
        digit_sum += n * 2

if digit_sum % 10 == 0:
    print("Card is valid!")
else:
    print("Card is invalid!")

关于python - 这是用 Python 编写 Luhn 算法的最有效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32541487/

相关文章:

python - 将线图重叠到 pandas 中的水平条形图

java - 生成从 1 到 2^k-1 的数字的二进制表示

c++ - STL 列表添加和删除所选元素

python - 如何将元组列表转换为字符串

Python 返回范围列表的组合?

python - 为什么 tkinter 在销毁实例时不释放内存?

python - 脆皮表格和 bootstrap 3 没有显示错误消息

python - 如何在 Python 中为矩阵/嵌套列表的每个元素加 1?

algorithm - 如何根据项目的重量将项目列表分成相等的分区?

c++ - 递归矩阵乘法