[错误分析][python3] ‘int‘ object does not support item assignment

快速查看解决方案

错误提示

Traceback (most recent call last):
File “a.py”, line 9, in
v[i],w[i] = map(int,input().split())
TypeError: ‘int’ object does not support item assignment

错误代码

N = 1010
f = [[0] * N for i in range(N)]
w = [0] * N
v = [0] * N

if __name__ == '__main__':
    n,v = map(int,input().split())
    for i in range(n):
        v[i],w[i] = map(int,input().split())

    for i in range(n):
        for j in range(v):
            f[i][j] = f[i - 1][j]
            if j >= v[i]:
                f[i][j] = max(f[i][j],f[i - 1][j - v[i]] + w[i])

    print(f[n][v])
输入样例

5 5
1 1
2 2
3 3
4 4
5 5

ps:这是背包问题的代码。在第9行报了TypeError错误。


错误分析

  • 这是TypeError(类型错误),经过一番检查,初步排除了算法思路导致错误的可能。
  • 核对了题目中数据的输入格式和输入样例,排除了格式上的错误。
  • 排除python语法使用不当导致的错误。

经过多方的观察和网上资料的搜索,依旧没能解决我的问题。
之后我从中提取了错误的代码,并定位到了错误的存在。
请看一下代码

v = 31
v[1] = 31

其报错提示为:

Traceback (most recent call last):
File “a.py”, line 2, in
v[1] = 31
TypeError: ‘int’ object does not support item assignment

于是错误原因便显而易见了

错误原因和修正

这是由于列表和变量重名导致的错误。

v = 31
v[1] = 31

就这个代码来说,第一行初始化了v为一个·int型的变量。
而第二行则把v当成了一个列表,对其中的第1号元素进行了赋值。

因此错误就发生了。
TypeError类型错误),‘int’ object does not support item assignment(int对象不支持项目赋值)

原代码中,之所以会出现这样的错误,也是因为变量名和列表名的复用,而究其根本,便是我对于代码中的变量名和列表名没有提前做好规划。

将列表名/变量名做修改,避免错误的发生,即可解决此问题。
处理完的代码如下所示。

N = 1010
f = [[0] * N for i in range(N)]
W = [0] * N
V = [0] * N

if __name__ == '__main__':
    n,v = map(int,input().split())
    for i in range(n):
        V[i],W[i] = map(int,input().split())

    for i in range(n):
        for j in range(v):
            f[i][j] = f[i - 1][j]
            if j >= V[i]:
                f[i][j] = max(f[i][j],f[i - 1][j - V[i]] + W[i])

    print(f[n][v])

建议和反思

为题目中的变量命名形成自己的规则和习惯,是避免出现此问题的一个好方法。

比如同一列表名首字母大写,变量遵循小驼峰式命名规则,则可以很大程度上避免列表和变量直接的命名冲突。

对于一道程序设计题,在以迅雷不及掩耳之势敲完代码前,还应该对其中的每一个变量名列表名提前做好规划,避免命名冲突的错误。


原创不易,感谢您的支持。

你可能感兴趣的:(python,错误分析,python,bug)