Python报TypeError: 'int' object does not support item assignment问题咨询
报错根本原因
- 触发
TypeError: 'int' object does not support item assignment的核心原因是:执行promedios[x] = float(punteos / 3)代码时,变量promedios的实际类型为整数(int),而非列表、字典等支持索引赋值的可变序列类型。整数属于不可变类型,本身不支持[索引]形式的赋值操作,因此触发该报错。
修改后代码的合理性评估
修改后的代码虽然规避了最初的类型报错,但逻辑存在明显缺陷,并不合理:
promedios列表定义在外层for循环内部,每遍历1门课程就会被清空重置,无法存储所有课程的平均分数值,仅能保留当前课程的3次中间计算结果。- 末尾的
print(promedios[x])存在索引越界风险:内层循环仅会向promedios追加3个元素,索引最大值为2,当外层循环的x大于等于3时,访问promedios[x]会直接触发IndexError。 - 内层循环每次录入成绩后都计算、存储中间平均值属于冗余操作,仅需在3个成绩全部录入完成后计算一次最终平均值即可。
简单优化方案
如果你的需求是存储5门课程的最终平均分,可做如下调整:
- 将
promedios = []移到外层for循环的外部,避免每次循环被重置。 - 删除内层循环中的
promedio1 = float(punteos/3)和promedios.append(promedio1)代码,在内层循环结束后统一计算当前课程的最终平均分,再追加到promedios列表中。 - 输出时直接打印
promedios[x]即可获取对应课程的最终平均分,不会出现越界问题。
内容的提问来源于stack exchange,提问作者Mau España
相关产品推荐
相关产品推荐

