int类型不支持索引错误:16位卡号偶位乘2实现问题
解决'int' does not support indexing错误及实现偶位数字乘2需求
错误原因
你将处理后的卡号转为整数类型后,尝试用cardNumber[i]索引访问单个数字,但整数不支持索引操作,这就是触发'int' does not support indexing错误的直接原因。
解决方案
要处理单个数字,需将卡号保持为字符串(或转为字符列表),因为字符串/列表支持索引访问每个字符,处理后再按需转换类型。
修正后的代码
cardNumber = input("Enter a 16-digit card number:") # 去除空格,保留字符串类型 card_str = cardNumber.replace(" ", "") # 转为列表方便修改(字符串不可变,无法直接修改单个字符) card_list = list(card_str) # 处理索引0、2、4...的位置(对应从左数第1、3、5...位) # 若需处理从左数第2、4、6...位,改为range(1, 16, 2)即可 for i in range(0, 16, 2): # 字符转整数计算,结果转回字符串存回列表 digit = int(card_list[i]) card_list[i] = str(digit * 2) # 合并为字符串输出 processed_card = ''.join(card_list) print("处理后的卡号:", processed_card) # 如需整数形式,可再转换: # processed_card_int = int(processed_card) # print(processed_card_int)
关键说明
- 字符串是不可变类型,直接修改
card_str[i]会报错,因此转为列表操作更灵活 - 每个字符需先转为整数才能执行乘法运算,运算结果要转回字符串才能存入列表
- 偶位的定义需明确:代码中默认处理的是索引为偶数的位置(从0开始计数),若你的需求是“位置编号为偶数”(比如第2、4位),调整循环的
range参数即可
内容的提问来源于stack exchange,提问作者Xavi Lopez Ponte
相关产品推荐
相关产品推荐

