Python用组合索引取列表值时报'int'对象不可下标错误怎么解决?
错误原因
- 你传入
decode函数的参数是整数类型,Python中整数不支持下标索引操作,也就是你写的decode[x*2-2]这种写法是非法的,这就是抛出'int' object is not subscriptable错误的直接原因。 - 另外你的循环范围存在逻辑问题:
range(1, len(str(decode)) // 2)是左闭右开区间,会漏掉最后一组两位数值,导致解码结果不全。 - 函数名和参数名完全重名属于不规范写法,容易引发逻辑混乱,建议调整。
修复方案
首先把入参提前转成字符串再做下标截取,同时修正循环范围,调整参数命名避免冲突,修复后代码如下:
coded = ['','','','','','','','','','', 'a','b','c','d','e','f','g','h','i', 'j','k','l','m','n','o','p','q','r', 's','t','u','v','w','x','y','z',' '] def decode(encode_num): out = '' # 提前把输入转成字符串方便截取 encode_str = str(encode_num) # 循环范围调整为左闭右开刚好覆盖所有分组 for x in range(1, len(encode_str) // 2 + 1): # 直接从字符串截取两位转成整数当索引 out += coded[int(encode_str[x * 2 - 2 : x * 2])] return out print(decode(16133335202320))
内容的提问来源于stack exchange,提问作者farderer
相关产品推荐
相关产品推荐

