如何简化含重复表格操作的Python多分支if语句?
优化多分支重复代码方案
方案一:利用线性映射关系简化代码
观察到用户ID(1-7)与目标单元格(B3-B9)存在行号=ID+2的线性对应关系,直接通过计算动态生成单元格地址,完全替代多分支if:
@bot.listen(hikari.GuildMessageCreateEvent) async def message_count(event): user_id = event.author_id # 仅处理ID在1-7范围内的用户 if 1 <= user_id <= 7: row_num = user_id + 2 cell = f'B{row_num}' # 统一执行单元格更新逻辑 current_value = int(wks.acell(cell).value) current_value += 1 wks.update(cell, current_value)
方案二:用映射字典维护对应关系(扩展性更强)
如果后续ID与单元格的对应关系可能发生非线性调整,推荐用字典预先维护映射表,逻辑更清晰且易维护:
# 提前定义ID到目标单元格的映射表 ID_TO_CELL = { 1: 'B3', 2: 'B4', 3: 'B5', 4: 'B6', 5: 'B7', 6: 'B8', 7: 'B9' } @bot.listen(hikari.GuildMessageCreateEvent) async def message_count(event): user_id = event.author_id # 通过字典获取对应单元格,不存在则跳过 target_cell = ID_TO_CELL.get(user_id) if target_cell: current_value = int(wks.acell(target_cell).value) current_value += 1 wks.update(target_cell, current_value)
优化说明
- 两种方案都彻底消除了重复代码,仅保留核心业务逻辑
- 方案一适合固定线性对应关系的场景,代码更简洁
- 方案二更灵活,后续调整ID与单元格的对应关系时,仅需修改映射字典,无需改动业务逻辑
内容的提问来源于stack exchange,提问作者Kitty Summoner
相关产品推荐
相关产品推荐

