Python水仙花数函数报错TypeError: 'int' object is not subscriptable
报错诱因说明
这个报错和pow()方法没有任何关联,核心触发原因是你直接对整数类型的入参value执行了下标索引操作value[i]:Python 中仅字符串、列表这类序列类型支持通过[]下标取值,整数属于不可下标访问的标量类型,因此触发了'int' object is not subscriptable的类型错误。
除此之外你的代码还存在两处逻辑缺陷:
- 你在
for循环中嵌套了无终止条件的while循环,一旦满足i<leng的条件就会进入死循环,没有任何修改i或者leng的逻辑可以跳出循环 - 你没有将整数入参转成字符串就尝试取每一位数值,就算解决了下标报错问题,计算逻辑也无法正常运行
修正后的参考代码
def nar(value): # 先将整数转为字符串,方便逐位取值 str_val = str(value) leng = len(str_val) total = 0 for i in range(leng): # 从字符串中取出每一位字符,转成整数后计算对应次幂 total += pow(int(str_val[i]), leng) return total == value
功能验证
可以用典型值测试功能是否符合预期:
- 输入
153返回True,符合1³+5³+3³=153的水仙花数规则 - 输入
145返回False,计算结果1³+4³+5³=190和原数不相等
内容的提问来源于stack exchange,提问作者theonlymoby
相关产品推荐
相关产品推荐

