Python用for循环实现座位校验函数check_seating_arrangement报错求解
代码问题分析与修复方案
原代码核心问题
- 主函数
check_seating_arrangement逻辑错误:- 条件
arrangement in must_list[i]无意义:arrangement是完整座位列表,must_list[i]是两个姓名的元组,该条件永远为假,辅助函数从未被正确调用 - 判断
if check_must==True错误:check_must是函数对象,未执行调用,该条件永远为假,最终直接返回False
- 条件
- 辅助函数
check_must逻辑完全倒置:应该检查指定的两个人是否在座位中相邻,而非遍历所有人员判断邻居是否在要求列表中
修复后代码
def check_two_adjacent(arrangement, a, b): # 辅助函数:判断a和b是否在环形座位中相邻 n = len(arrangement) idx_a = arrangement.index(a) # 用取模运算统一处理首尾相邻的边界情况,无需单独判断首尾索引 left_neighbor_idx = (idx_a - 1) % n right_neighbor_idx = (idx_a + 1) % n return arrangement[left_neighbor_idx] == b or arrangement[right_neighbor_idx] == b def check_seating_arrangement(arrangement, must_list): # 遍历所有必须相邻的组合,只要有一个不满足就直接返回False for p1, p2 in must_list: if not check_two_adjacent(arrangement, p1, p2): return False # 所有要求都满足返回True return True
测试验证
运行你给出的测试用例:
print(check_seating_arrangement(['Serena', 'Timothy', 'Lucy', 'Harry', 'Gina', 'Alex'], [('Serena', 'Alex'), ('Harry', 'Lucy')]))
输出结果为True,符合预期。
内容的提问来源于stack exchange,提问作者tmiwetmiwtwete
相关产品推荐
相关产品推荐

