Forsta Beacon Decipher配额选择:分组互斥选项需求及代码问题
Forsta Beacon Decipher 分组互斥配额选择解决方案
需求说明:在配额选择中,需从10个符合资格的Concept里选取2个,但只能选择前5个Concept(Concept1-Concept5)或后5个Concept(Concept6-Concept10),禁止跨组同时选中。
原代码仅能阻止特定两个Concept同时选中,无法实现分组互斥的要求,以下是修改后的解决方案:
# 定义两组Concept的路径标识 GROUP1_RANGE = range(1, 6) GROUP2_RANGE = range(6, 11) QUOTA_SHEET = 'Concept Quota' CONCEPT_PATH_PREFIX = '/Concept Quota/Concept' def quota_hook(sheet, table, cells): if sheet == QUOTA_SHEET: group1_selected = [] group2_selected = [] # 遍历选中项,按组分类 for cell in cells: concept_path = cell[2] # 提取Concept编号 try: concept_num = int(concept_path.split('Concept')[-1]) except ValueError: continue if concept_num in GROUP1_RANGE: group1_selected.append(cell) elif concept_num in GROUP2_RANGE: group2_selected.append(cell) # 处理跨组选中的情况 if group1_selected and group2_selected: # 保留数量多的组;若数量相等(各1个),默认保留前5个组,可按需调整 if len(group1_selected) >= len(group2_selected): return group1_selected[:2] else: return group2_selected[:2] else: # 仅单组选中,返回最多2个选项 return (group1_selected + group2_selected)[:2] return cells
代码逻辑说明:
- 通过提取Concept编号,将选中项自动划分为前5组和后5组
- 检测到跨组选中时,自动保留数量较多的一组;若两组各选1个,默认保留前5组的选项(可修改返回逻辑切换为保留后5组)
- 最终确保返回的选中项不超过2个,且全部来自同一组
内容的提问来源于stack exchange,提问作者Marc Russo
相关产品推荐
相关产品推荐

