|
发表于 2023-3-29 23:29:55
|
显示全部楼层
本楼为最佳答案
以下是Python代码实现:
- def check_credit_card(cardNum):
- # 将字符串转换为数字列表
- nums = [int(x) for x in cardNum]
- # 从倒数第二个数字开始,每隔一个数字乘以2,得到所有乘积的各个数位之和
- sum1 = sum([int(x) for x in str(sum([num * 2 if i % 2 == 0 else num for i, num in enumerate(nums[-2::-1])]))])
- # 对于没有乘上2的数字,直接相加
- sum2 = sum([num for i, num in enumerate(nums[-1::-2])])
- # 将两部分的结果相加
- sum3 = sum1 + sum2
- # 判断结果是否为10的倍数
- return sum3 % 10 == 0
- cardNum = input()
- print(check_credit_card(cardNum))
复制代码
解释:
首先将输入的信用卡号码转换为数字列表,然后根据 Luhn 算法计算出 sum1 和 sum2,最后将两部分结果相加得到 sum3,判断 sum3 是否为 10 的倍数即可。
注意,乘以 2 后的数字可能会有两位数,例如 6*2=12,因此在计算 sum1 时需要将得到的乘积的各个数位相加。可以使用 str() 将乘积转换为字符串,然后使用列表推导式将各个数位转换为数字并相加。 |
|