信用卡验证器逆向隔位数字翻倍功能异常,寻求技术帮助
信用卡卡号翻倍验证函数修复方案
错误原因
你当前的函数直接对索引值进行了翻倍操作,而不是对索引对应的卡号数字翻倍,这才导致结果不符合预期。
修正后的代码
def doubled_card_number_from_behind(card_digits): double_digit_list = [] # 从倒数第二位的索引开始,逆向隔位遍历所有目标位置 for idx in range(len(card_digits) - 2, -1, -2): # 取对应位置的数字进行翻倍,而非索引本身 doubled_value = card_digits[idx] * 2 double_digit_list.append(doubled_value) return double_digit_list
关键改进点
- 参数传入:将存储卡号数字的列表作为参数传入函数,避免依赖全局变量,代码更健壮。
- 操作对象修正:遍历索引
idx后,通过card_digits[idx]获取对应位置的卡号数字,再执行翻倍操作。 - 循环范围调整:循环结束条件设为
-1,确保能覆盖到卡号的第一位数字(16位卡号会遍历8个目标位置,符合Luhn算法要求)。
测试验证
以卡号4326571675482146为例,先将卡号转为整数列表:
card_digits = [4,3,2,6,5,7,1,6,7,5,4,8,2,1,4,6]
调用修正后的函数,得到的结果为[8,4,8,14,2,10,4,8],完全符合预期。
额外提示
确保存储卡号的列表中是整数类型的数字,如果用户输入的是字符串格式的卡号,需要先做转换:
card_input = input("请输入信用卡卡号:").strip() card_digits = [int(char) for char in card_input]
内容的提问来源于stack exchange,提问作者APY
相关产品推荐
相关产品推荐

