You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

信用卡验证器(Luhn算法)报'int object is not subscriptable'错误求解

解决'int object is not subscriptable'错误 & 为什么要使用字符串处理信用卡号

嘿,我来帮你拆解这个问题!首先咱们先搞懂你遇到的错误到底是什么意思:

'int object is not subscriptable' 翻译过来就是“整数对象不支持下标操作”——简单说,你不能像操作字符串、列表那样,用[::-1]或者[3:]这种切片语法去处理一个整数。

为什么会出现这个错误?

看你代码里的这两行:

creditNums = int(input("Enter your credit card number mate: "))
reverseNums = creditNums[::-1]

你把输入的信用卡号转成了整数creditNums,但整数是单个数值,不是由多个元素组成的序列(比如字符串是字符序列,列表是元素序列)。当你尝试用creditNums[::-1]去“反转”它时,Python根本不知道你想做什么——因为整数没有“每一位”的概念,它只是一个抽象的数值。

为什么要用字符串处理?

信用卡号本质上是一串数字组成的序列,我们需要单独操作每一位数字(比如反转、取特定位置的数字、计算每一位的和)。字符串完美适配这个需求:

  • 字符串是字符序列,每一位数字对应一个字符,你可以直接用下标/切片访问任意位置的字符;
  • 处理完字符后,随时可以把单个字符转成整数进行数值计算,非常灵活。

如果坚持用整数处理,你得通过除法和取余来拆分每一位(比如1234 % 10取最后一位,1234 // 10去掉最后一位),这种写法不仅繁琐,还容易出错,远不如字符串直观。

修正你的代码示例

这里给你调整一下开头的部分,解决类型问题,同时贴合Luhn算法的逻辑:

def main():
    # 先保留输入为字符串,方便按位操作
    credit_card_str = input("Enter your credit card number mate: ")
    
    # 反转字符串(Luhn算法第一步)
    reversed_digits = credit_card_str[::-1]
    
    sum1 = 0
    sum2 = 0
    
    # 处理反转后奇数位置的数字(索引1,3,5...):乘以2,若结果大于9则拆成个位+十位
    for i in range(1, len(reversed_digits), 2):
        num = int(reversed_digits[i])
        doubled = num * 2
        sum1 += doubled // 10 + doubled % 10
    
    # 处理反转后偶数位置的数字(索引0,2,4...):直接求和
    for i in range(0, len(reversed_digits), 2):
        sum2 += int(reversed_digits[i])
    
    total = sum1 + sum2
    if total % 10 == 0:
        print("Valid credit card number!")
    else:
        print("Invalid credit card number.")

main()

总结一下

  • 整数是单一数值,不支持下标/切片操作,所以你之前的代码会报错;
  • 字符串是序列类型,能轻松访问每一位数字,是处理这类“数字序列”问题的最优选择;
  • 后续计算时,把单个字符转成整数即可完成数值运算。

内容的提问来源于stack exchange,提问作者ClodeNoobs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:38:07