基于伪代码编写霸凌检测作业代码,遇'int' object is not subscriptable错误求助
搞定'int' object is not subscriptable错误,顺便捋顺霸凌者判定逻辑
兄弟,我太懂这种对着错误提示抓瞎的感觉了!咱先把这个错误的本质说透,再结合你的霸凌者判定任务,揪出你代码里的坑。
先搞懂错误到底啥意思
简单说:你试图用下标(比如x[0]、arr[i][j]这种)去访问一个整数变量,但整数根本没有下标这玩意儿啊! 比如你本来应该操作的是列表/二维数组,结果某个地方不小心把这个变量变成了单个整数,然后你还硬要给它加下标,Python自然就给你报错了。
结合你的任务,大概率是这几个地方出问题
你的任务是判断霸凌者:霸凌者k要满足两个条件——①所有其他学生都惧怕k;②k不惧怕任何其他学生。通常咱们会用二维数组(比如fear[i][j]表示学生i是否惧怕学生j)来存惧怕关系,出错点基本都在这个数组的处理上:
1. 数组初始化错成了整数
比如你本来想初始化一个n×n的二维数组,结果写成了这样:
n = 5 fear = 0 # 这里应该是[[False]*n for _ in range(n)],结果写成了整数0 # 后面访问fear[i][j]的时候,直接就报错了
正确的初始化应该是创建一个二维列表,用来存每个学生间的惧怕关系:
n = 5 # 初始化n×n的二维数组,默认所有学生之间都没有惧怕关系 fear = [[False for _ in range(n)] for _ in range(n)]
2. 变量名冲突,把数组变量改成了整数
比如你用n表示学生数,结果后面又把某个计算得到的整数赋值给了fear(本来是数组的变量名):
n = 5 fear = [[False]*n for _ in range(n)] # 中间某个地方不小心赋值: fear = n # 把数组改成了整数5 # 后面再用fear[i][j],肯定报错
这种情况最隐蔽,建议你检查所有对fear(或者你用来存惧怕关系的变量)的赋值操作,别让它变成整数。
3. 误把判断结果(布尔值/整数)当成数组用
比如在判定霸凌者条件时,你把all()返回的布尔值当成了数组,还去访问下标:
n = 3 fear = [[False, True, True], [False, False, True], [False, False, False]] for k in range(n): # others_fear_k是布尔值(True/False),不是数组 others_fear_k = all(fear[i][k] for i in range(n) if i != k) if others_fear_k[0]: # 这里就会报错!布尔值不能用下标访问 pass
正确的做法是直接用布尔值判断:
if others_fear_k: # 继续判断第二个条件...
给你一个霸凌者判定的正确代码片段参考
你可以对照这个片段,排查自己的代码:
n = int(input("输入学生数:")) # 初始化惧怕关系数组 fear = [[False]*n for _ in range(n)] # 假设这里你通过输入或者其他方式填充惧怕关系,比如: # 示例:学生0惧怕1,学生0惧怕2,学生1惧怕2,学生2谁都不怕 fear[0][1] = True fear[0][2] = True fear[1][2] = True has_bully = False for k in range(n): # 条件1:所有其他学生都惧怕k others_fear_k = all(fear[i][k] for i in range(n) if i != k) # 条件2:k不惧怕任何其他学生 k_fears_none = all(not fear[k][j] for j in range(n) if j != k) if others_fear_k and k_fears_none: has_bully = True print(f"找到霸凌者:学生{k}") break if not has_bully: print("班级里没有霸凌者")
快速排查技巧
- 找到报错的那一行,把你用下标访问的变量打印出来:
print(type(你的变量名), 你的变量名),看看是不是真的变成整数了。 - 检查数组初始化、赋值的所有地方,确保存惧怕关系的变量始终是列表/数组类型。
内容的提问来源于stack exchange,提问作者user9377534
相关产品推荐
相关产品推荐

