当前位置: 首页 > news >正文

python: 枚举类型 enum

 

from enum import Enum, auto# 先定义枚举类(保持之前的逻辑,补充必要的方法)
class DesignPattern(Enum):PROXY = auto()SINGLETON = auto()FACTORY = auto()def show_example(self):"""展示对应设计模式示例(保留原有逻辑)"""print(f"\n===== 展示【{self.name}({self._name_to_cn(self.name)})】示例 =====")# 这里是示例逻辑占位,替换为你实际的示例执行代码if self == DesignPattern.PROXY:print("执行代理模式示例...")elif self == DesignPattern.SINGLETON:print("执行单例模式示例...")elif self == DesignPattern.FACTORY:print("执行工厂模式示例...")@staticmethoddef _name_to_cn(name: str) -> str:"""枚举名称转中文"""cn_map = {"PROXY": "代理模式","SINGLETON": "单例模式","FACTORY": "简单工厂模式"}return cn_map.get(name, name)# 封装交互逻辑为函数,返回选择的序列号(退出返回0)
def select_design_pattern() -> int:"""让用户选择设计模式,返回选择的序列号(1/2/3),退出则返回0:return: 选择的序列号(int),退出返回0"""print("\n=== 方式3:用户选择展示 ===")print("可选设计模式(输入0或q退出):")# 遍历枚举展示选项for idx, pattern in enumerate(DesignPattern, 1):print(f"{idx}. {pattern._name_to_cn(pattern.name)}({pattern.name})")print("0. 退出")  # 明确退出选项while True:  # 循环重试,直到输入有效或退出user_input = input("\n请输入序号选择要展示的设计模式(输入0/q退出):").strip()# 退出条件:输入0或q/Qif user_input in ("0", "q", "Q"):print("👋 退出选择流程")return 0  # 退出时返回0# 处理数字选择try:choice = int(user_input)# 校验序号是否在有效范围内if 1 <= choice <= len(DesignPattern):print(f"✅ 你选择了序号:{choice}(对应{list(DesignPattern)[choice-1]._name_to_cn(list(DesignPattern)[choice-1].name)})")return choice  # 返回用户选择的序列号else:print(f"❌ 输入无效!请输入1-{len(DesignPattern)}之间的数字,或0/q退出")except ValueError:# 非数字且非退出指令,提示重新输入print("❌ 输入无效!请输入数字序号,或0/q退出")# 主程序调用
if __name__ == "__main__":# 调用选择函数,获取返回的序列号selected_num = select_design_pattern()# 根据返回值处理逻辑if selected_num == 0:# 退出逻辑print("程序结束")else:# 执行选中的设计模式示例selected_pattern = list(DesignPattern)[selected_num - 1]selected_pattern.show_example()# 可选:打印返回的序列号(验证用)print(f"\n📌 本次选择的序列号是:{selected_num}")

  

更另活的:

def select_design_pattern() -> tuple[int, DesignPattern | None]:"""返回 (序列号, 选中的枚举对象),退出则返回 (0, None)"""print("\n=== 方式3:用户选择展示 ===")print("可选设计模式(输入0或q退出):")for idx, pattern in enumerate(DesignPattern, 1):print(f"{idx}. {pattern._name_to_cn(pattern.name)}({pattern.name})")print("0. 退出")while True:user_input = input("\n请输入序号选择要展示的设计模式(输入0/q退出):").strip()if user_input in ("0", "q", "Q"):print("👋 退出选择流程")return (0, None)try:choice = int(user_input)if 1 <= choice <= len(DesignPattern):selected_pattern = list(DesignPattern)[choice-1]print(f"✅ 你选择了序号:{choice}(对应{selected_pattern._name_to_cn(selected_pattern.name)})")return (choice, selected_pattern)  # 返回(序列号, 枚举对象)else:print(f"❌ 输入无效!请输入1-{len(DesignPattern)}之间的数字,或0/q退出")except ValueError:print("❌ 输入无效!请输入数字序号,或0/q退出")# 调用示例
if __name__ == "__main__":selected_num, selected_pattern = select_design_pattern()if selected_num == 0:print("程序结束")else:selected_pattern.show_example()print(f"\n📌 本次选择的序列号是:{selected_num}")

  

http://www.jsqmd.com/news/437153/

相关文章:

  • 携程机票采集算法分析
  • E.位运算-基础——338. 比特位计数
  • 微服务架构下的API测试困境与契约验证范式
  • 2026年3月气体质量流量仪厂家推荐,高性能与可靠性兼具的优质品牌 - 品牌鉴赏师
  • typedef用法
  • Eureka服务注册中心在大数据平台中的最佳实践
  • 2026年3月冒菜加盟公司推荐,开店成功率高与口碑俱佳品牌 - 品牌鉴赏师
  • 大模型是怎么思考的?揭秘 AI 的大脑工作原理
  • 2026年3月高温伺服电机厂家推荐,高温工况精密伺服控制厂家 - 品牌鉴赏师
  • 2026年3月娜塔莉绿化苗木基地权威推荐,种植实力与市场口碑深度解析 - 品牌鉴赏师
  • 2026年3月鸡爪槭苗木批发基地推荐,精品苗木与景观工程专用商家 - 品牌鉴赏师
  • LVGL 提高帧率
  • 国产32位微控制器MCU怎么选?2026年主流厂商推荐榜单与测评指南
  • 为什么银在2026年表现优于黄金?现在投资银还晚吗?
  • GUI-Guider 更新screen_1_label_1标签
  • LVGL检测页面是否关闭 标签是否可见防止更新标签卡死
  • HR人事管理系统哪家好?深度拆解:为什么“可定制+双模式+本地服务”才是企业降本增效的终极答案?
  • 4060要怎么训练一个可以不用api画solidworks的ai
  • .net有什么类库加载图片为窗口背景,放大图片不模糊
  • 跨行转岗网络安全有多香?薪资翻倍!45天逆袭9K+
  • 北京高端购物中心/商场美陈设计优选榜:3家创意公司力荐
  • 计算机毕业设计springboot汽车美容服务管理系统 基于SpringBoot的汽车养护服务综合管理平台设计与实现 基于SpringBoot的智慧车美门店运营系统开发与应用
  • 2000-2025年地级市低空经济企业数据
  • 2026年3月空调冷媒检漏仪厂家推荐,空调制冷系统专用检漏厂家 - 品牌鉴赏师
  • 2026年3月便携式测氢仪厂家推荐,便携现场检测与快速响应厂家 - 品牌鉴赏师
  • 一文带你深入了解静态成员变量/函数 在类中的应用
  • 2026年3月合金管厂家推荐:行业测评与选择指南 - 品牌鉴赏师
  • 政府信息公开监督保障方案怎么写,有哪些内容
  • Pandas数据处理(1): 数据的导入导出与缺失值处理
  • 空实辩证:以指月之手的理论自省