TypeError: 'type'对象不可下标访问问题求助(附Python代码)
错误原因与修复方案
核心错误原因
你写的r = int是把变量r赋值成了Python的整数类型对象,而不是可通过下标访问的容器(比如列表)。当你执行r[q] = q + 1或r[w] != i这类下标操作时,Python会报错,因为int类型本身不支持下标访问,这就是你看到的TypeError: 'type' object is not subscriptable的原因。
修复步骤与修正代码
- 正确初始化
r为列表:根据你的循环范围,提前创建一个足够长度的列表,要么用空列表逐步添加元素,要么直接初始化对应长度的列表。 - 删除循环内多余的
q = q + 1:for q in range(...)会自动迭代q的取值,手动修改q会破坏循环的正常逻辑。 - 修正
print(q[w])的错误:这里q是循环变量,不是容器,应该改为print(r[w])。
修正代码示例(按索引赋值版本)
# 假设casovaJednotka和celkovaCasovaJednotka是已定义的变量 start = casovaJednotka - celkovaCasovaJednotka # 初始化r为对应长度的列表,用0填充占位 r = [0] * (casovaJednotka + 1) for q in range(start, casovaJednotka + 1): r[q] = q + 1 for i in range(casovaJednotka, 0, -1): for w in range(start, casovaJednotka): if r[w] != i: print(r[w]) if casovaJednotka - 1 == w: print("0\n")
修正代码示例(动态添加元素版本)
r = [] start = casovaJednotka - celkovaCasovaJednotka for q in range(start, casovaJednotka + 1): r.append(q + 1) for i in range(casovaJednotka, 0, -1): for w in range(start, casovaJednotka): if r[w] != i: print(r[w]) if casovaJednotka - 1 == w: print("0\n")
内容的提问来源于stack exchange,提问作者Christofer Kiňo
相关产品推荐
相关产品推荐

