Python实现银行卡号校验时如何将两位数拆分为单个数字求和
Luhn算法(银行卡校验逻辑)实现方案
现有代码问题修正
- 你当前使用
card_number.split()处理输入是错误的:split()默认按空白符切割字符串,如果你输入的是连续的11位数字,最终得到的是仅包含整个卡号字符串的单元素列表,无法遍历单个数字。可改为用列表推导式直接生成单个数字组成的列表:
card_numbers = [int(i) for i in card_number.strip()]
两位数拆分求和实现方式
方法1:数学运算实现(性能最优)
对于任意大于等于10的整数n,十位数字为n // 10(整数除法取整),个位数字为n % 10(取余),直接相加即可得到各位和:
# 示例:n=14时 sum_digit = (n // 10) + (n % 10) # 计算结果为1+4=5
方法2:字符串转换实现(通用性强)
把数字转为字符串后遍历每一位,分别转整数再求和,该方法对任意位数的数字都适用,不需要提前判断位数:
# 示例:n=14时 sum_digit = sum(int(i) for i in str(n)) # 计算结果为1+4=5
调整后的完整可运行代码
card_number = input('Please enter your 11 digit card number: ') # 修正:将输入字符串转为单个数字组成的列表 card_numbers = [int(i) for i in card_number.strip()] total = 0 # 从右往左数第二位开始,隔一位遍历 for num in card_numbers[-2::-2]: doubled = num * 2 if doubled >= 10: # 调用拆分求和逻辑,这里用数学方法为例 total += (doubled // 10) + (doubled % 10) else: total += doubled # 加上不需要翻倍的位的和,得到最终校验和 total += sum(card_numbers[-1::-2]) print("最终校验和为:", total)
内容的提问来源于stack exchange,提问作者maxwell7
相关产品推荐
相关产品推荐

