Python代码问题:检测同组人员是否在目标组同一组,结果不符
问题排查:sameGroup人员组匹配违规次数计算错误
需求:判断sameGroup中的每组人员是否全部存在于groups的同一个组中,满足条件则累加违规次数violations。当前代码运行指定测试用例输出为0,预期输出为1,需排查错误。
原代码
X = int(input()) sameGroup = [] groups = [] violations = 0 for i in range(X): sameName = input().split() sameGroup.append(sameName) for i in range(X): group = input().split() groups.append(group) for i in range(len(sameGroup)): names = sameGroup[i] print(names) for i in range(len(groups)): if names in groups[i]: print("yo") violations += 1 print(violations)
测试用例输入
2 hello Hi Hel hooo Hello Hi yoo helloo heee haaa
当前输出
['hello', 'Hi'] ['Hel', 'hooo'] 0
预期输出
1
错误原因分析
- 逻辑判断错误:核心问题出在
if names in groups[i]这行。names是一个列表(如['hello', 'Hi']),而groups[i]是另一个人员列表,这行代码判断的是整个names列表是否作为单个元素存在于groups[i]中,而非判断names里的每个成员是否都属于groups[i],完全不符合需求逻辑。 - 变量名冲突:嵌套循环重复使用了变量
i,导致外层循环的i被内层循环覆盖,引发循环逻辑混乱。 - 大小写不匹配:测试用例中
sameGroup第一组的hello与groups第一组的Hello大小写不同,严格匹配下无法命中,这也是当前输出为0的直接原因之一。
修复后的代码
X = int(input()) sameGroup = [] groups = [] violations = 0 for i in range(X): sameName = input().split() sameGroup.append(sameName) for i in range(X): group = input().split() groups.append(group) for i in range(len(sameGroup)): names = sameGroup[i] # 遍历每个组,检查当前names的所有成员是否都在该组内 for j in range(len(groups)): # 忽略大小写的匹配(如果需要严格匹配则去掉.lower()) group_lower = [g.lower() for g in groups[j]] if all(name.lower() in group_lower for name in names): violations += 1 # 一个sameGroup组只要匹配到一个groups组就算违规,避免重复累加 break print(violations)
修复说明
- 替换嵌套循环变量名为
j,避免与外层循环的i冲突。 - 使用
all()函数判断names中的每个成员是否都存在于当前groups组中,符合需求逻辑。 - 增加大小写转换处理,解决测试用例中大小写不匹配的问题,确保能命中预期匹配场景,输出结果为1。
- 匹配到符合条件的组后添加
break,避免同一个sameGroup组匹配多个groups组时重复累加违规次数(可根据实际需求调整是否保留)。
内容的提问来源于stack exchange,提问作者Ibrahim Kasim
相关产品推荐
相关产品推荐

