编码问题与预期不符(bracket/index, strings)

编码问题与预期不符:程序成功执行,但是与预期结果不相符

原问题:
编写一个程序来读取一行用空格分隔的信用卡号码,并使用 "卢恩算法 "来检查该卡号是否有效。
注意:这在现实世界中是不完全一样的。在这个练习中,我们需要检查校验码是否正确。检查数字的计算方法如下:

  1. 切掉要验证的数字的校验位(最后一位)。
  2. 2.计算校验数
    a) 取原数,从最右边的数字开始向左移动,每隔一个数字(包括最右边的数字)的数值加倍。
    b) 将每个位置的结果值替换为这个位置的数值的数字之和。
    c) 将所有位置的结果值相加为s。
    d) 计算出的校验码等于'10-s mod 10'。
    1. 将你的结果与你剪下的校验码进行比较。当这两个数字相同时,该卡号是有效的。

我的解答和实际结果:

img

img


想请问一下问题出现在哪里? 感谢解答~

以下内容部分参考ChatGPT模型:


问题出现在第二个测试用例中,输入的信用卡号包含了括号和下标,这样的字符串无法被正确解析成数字进行计算。需要对输入进行预处理,将括号和下标去除,只保留数字部分进行计算。可以使用正则表达式进行匹配和替换。示例代码如下:

import re

def validate_credit_card_number(card_number):
    # 去除括号和下标,只保留数字部分
    card_number = re.sub(r'[^\d]+', '', card_number)
    # 切掉校验位
    check_digit = int(card_number[-1])
    card_number = card_number[:-1]
    # 计算校验和
    total = 0
    for i, digit in enumerate(reversed(card_number)):
        if i % 2 == 0:
            total += int(digit)
        else:
            doubled = int(digit) * 2
            total += doubled // 10 + doubled % 10
    # 计算校验码
    checksum = 10 - total % 10
    if checksum == 10:
        checksum = 0
    # 比较校验码和输入的校验位
    return checksum == check_digit

测试代码:

assert validate_credit_card_number('4111-1111-1111-1111') == True
assert validate_credit_card_number('4111 1111 1111 1111') == True
assert validate_credit_card_number('5500 0000 0000 0004') == True
assert validate_credit_card_number('340000000000009') == True
assert validate_credit_card_number('6011 1111 1111 1117') == True
assert validate_credit_card_number('30569309025904') == True
assert validate_credit_card_number('1234 5678 9012 3456') == False

如果我的建议对您有帮助、请点击采纳、祝您生活愉快