如何简化Python代码中的多层嵌套if判断?有哪些可行实现方案?
可行简化方案
方案1:集合成员判断(最适配当前场景,代码最简洁)
你的核心逻辑是判断输入的profil不在指定合法值范围内时触发重输,直接把所有合法值存入集合做单次判断即可完全消除嵌套,后续维护也更方便:
user_id = message.from_user.id user = user_data[user_id] user.profil = message.text # 统一定义合法profil值,后续增删改只需要改这一处 VALID_PROFILES = {'97', '82', '72', '64', '45', '25'} if user.profil not in VALID_PROFILES: markup = types.ReplyKeyboardMarkup(one_time_keyboard=True) # 直接拆包集合元素,不用重复写值 markup.add(*VALID_PROFILES) msg = bot.send_message(message.chat.id, 'אנא בחר פרופיל.', reply_markup=markup) bot.register_next_step_handler(msg, process_profil_step) return
方案2:卫语句/多分支判断
如果后续需要给不同profil值加单独的处理逻辑,可以用多分支结构替代嵌套:
user_id = message.from_user.id user = user_data[user_id] user.profil = message.text if user.profil == '97': # 可补充97对应的特殊处理逻辑 pass elif user.profil == '82': # 可补充82对应的特殊处理逻辑 pass elif user.profil == '72': pass elif user.profil == '64': pass elif user.profil == '45': pass elif user.profil == '25': pass else: markup = types.ReplyKeyboardMarkup(one_time_keyboard=True) markup.add('97', '82', '72', '64', '45', '25') msg = bot.send_message(message.chat.id, 'אנא בחר פרופיל.', reply_markup=markup) bot.register_next_step_handler(msg, process_profil_step) return
方案3:字典映射(适合后续有扩展需求的场景)
如果后续每个profil值需要对应独立的处理流程,用字典做映射扩展性最强:
user_id = message.from_user.id user = user_data[user_id] user.profil = message.text # 配置每个profil对应的处理函数,新增类型只需要加键值对 PROFILE_HANDLER_MAP = { '97': handle_profile_97, '82': handle_profile_82, '72': handle_profile_72, '64': handle_profile_64, '45': handle_profile_45, '25': handle_profile_25 } if user.profil not in PROFILE_HANDLER_MAP: markup = types.ReplyKeyboardMarkup(one_time_keyboard=True) markup.add(*PROFILE_HANDLER_MAP.keys()) msg = bot.send_message(message.chat.id, 'אנא בחר פרופיל.', reply_markup=markup) bot.register_next_step_handler(msg, process_profil_step) return # 合法值直接调用对应处理函数 PROFILE_HANDLER_MAP[user.profil](user, message)
内容的提问来源于stack exchange,提问作者Floyd1337
相关产品推荐
相关产品推荐

