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

pycharm实现skills示例

文章目录

      • 步骤
    • 报错 未找到技能: python

步骤

1、新建一个项目,名称为:skills_demo
2、在项目根目录下,创建一个名为 main.py 的文件,并将以下代码复制进去,代码:

importjsonimportosfromdataclassesimportdataclass,asdictfromenumimportEnumfromtypingimportList,Optional# 1. 定义技能类别枚举classSkillCategory(Enum):PROGRAMMING="编程"LANGUAGE="语言"SOFT_SKILL="软技能"DESIGN="设计"# 2. 定义技能数据类 (Dataclass)@dataclassclassSkill:name:strcategory:SkillCategory level:int=1# 默认等级为 1xp:int=0# 当前经验值# 升级所需的经验公式:当前等级 * 100defxp_needed(self)->int:returnself.level*100defadd_xp(self,amount:int)->bool:"""添加经验值,如果升级返回 True"""self.xp+=amount leveled_up=False# 检查是否升级(可能一次加很多经验,连升多级)whileself.xp>=self.xp_needed()andself.level<10:self.xp-=self.xp_needed()self.level+=1leveled_up=Trueprint(f"🎉 恭喜![{self.name}] 升级到了 Lv.{self.level}")ifself.level>=10:self.xp=0# 满级后经验清零或保留,这里设为清零returnleveled_updefget_power_score(self)->float:"""计算该技能的战力贡献 (等级^1.5)"""returnself.level**1.5defto_dict(self)->dict:"""转换为字典以便保存 JSON"""data=asdict(self)data['category']=self.category.value# 保存枚举的值而不是对象returndata# 3. 定义技能管理器classSkillManager:def__init__(self,save_file:str="skills_data.json"):self.save_file=save_file self.skills:List[Skill]=[]self.load_skills()defadd_skill(self,name:str,category:SkillCategory):new_skill=Skill(name=name,category=category)self.skills.append(new_skill)print(f"✅ 已添加新技能:{name}({category.value})")deflist_skills(self):ifnotself.skills:print("💤 还没有任何技能,快去添加吧!")returnprint("\n--- 📜 我的技能树 ---")total_power=0forsinself.skills:bar="█"*s.level+"░"*(10-s.level)print(f"[{s.category.value}]{s.name}: Lv.{s.level}{bar}({s.xp}/{s.xp_needed()}XP)")total_power+=s.get_power_score()print(f"---------------------")print(f"⚡ 总战力评分:{total_power:.2f}")print("---------------------\n")deftrain_skill(self,skill_name:str,xp_amount:int):found=Falseforsinself.skills:ifs.name==skill_name:s.add_xp(xp_amount)found=Truebreakifnotfound:print(f"❌ 未找到技能:{skill_name}")defsave_skills(self):data=[s.to_dict()forsinself.skills]withopen(self.save_file,'w',encoding='utf-8')asf:json.dump(data,f,ensure_ascii=False,indent=2)print(f"💾 技能数据已保存至{self.save_file}")defload_skills(self):ifnotos.path.exists(self.save_file):returntry:withopen(self.save_file,'r',encoding='utf-8')asf:data=json.load(f)self.skills=[]foritemindata:# 恢复枚举类型cat_enum=SkillCategory(item['category'])skill=Skill(name=item['name'],category=cat_enum,level=item['level'],xp=item['xp'])self.skills.append(skill)print(f"📂 已加载{len(self.skills)}个技能。")exceptExceptionase:print(f"⚠️ 加载数据失败:{e}")# 4. 主程序入口defmain():manager=SkillManager()# 如果是第一次运行,添加一些示例数据iflen(manager.skills)==0:print("🌱 初始化示例数据...")manager.add_skill("Python",SkillCategory.PROGRAMMING)manager.add_skill("PyTorch",SkillCategory.PROGRAMMING)manager.add_skill("English",SkillCategory.LANGUAGE)manager.add_skill("Communication",SkillCategory.SOFT_SKILL)# 模拟训练一下manager.train_skill("Python",150)# 升一级manager.train_skill("PyTorch",50)# 交互式菜单whileTrue:print("1. 查看技能树")print("2. 训练技能 (加经验)")print("3. 添加新技能")print("4. 保存并退出")choice=input("请选择操作 (1-4): ").strip()ifchoice=='1':manager.list_skills()elifchoice=='2':name=input("输入技能名称: ").strip()try:xp=int(input("输入获得的经验值: ").strip())manager.train_skill(name,xp)exceptValueError:print("❌ 经验值必须是数字!")elifchoice=='3':name=input("输入新技能名称: ").strip()print("类别: 1.编程 2.语言 3.软技能 4.设计")cat_idx=input("选择类别编号 (1-4): ").strip()cat_map={'1':SkillCategory.PROGRAMMING,'2':SkillCategory.LANGUAGE,'3':SkillCategory.SOFT_SKILL,'4':SkillCategory.DESIGN}ifcat_idxincat_map:manager.add_skill(name,cat_map[cat_idx])else:print("❌ 无效的类别")elifchoice=='4':manager.save_skills()print("👋 再见!")breakelse:print("❌ 无效输入")if__name__=="__main__":main()

3、在 main.py 编辑区域点击右键,点 运行,你会看到终端(Terminal)输出初始化的技能树。
4、交互测试
(1)在下方控制台输入 1 查看列表。
输入 2,然后输入 Python,再输入 200,观察它是否升级。
输入 4 保存退出。
(2)验证数据持久化:
再次运行程序(不要修改代码),你会发现它自动加载了你上次保存的数据,并且没有重新初始化那些默认数据。
你可以在左侧项目栏看到生成的 skills_data.json 文件,点开看看里面的数据结构。

报错 未找到技能: python

是因为代码中的名称为Python,大小写不一样,训练的时候终端输入改为Python即可。

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

相关文章:

  • VS Code 配置 Java JDK
  • Face3D.ai Pro多平台支持:Windows与Linux部署对比
  • 从零到精通:Redis 7 核心数据结构实战与单机部署指南
  • Figma学习
  • QT界面自适应实战:手把手教你用AutoResizer解决多分辨率适配难题
  • 从用户消息到 AI 回复:OpenClaw 完整执行链路解析
  • 别只顾着买量了!Google Play这次更新,可能让你的详情页“隐身”
  • vLLM实战:EngineCore核心流程解析与性能优化技巧
  • 2026年游戏主题海报制作复盘:从找图卡壳到快速出稿的全过程
  • Dify + VLLM实战:5步搞定高性能本地大模型接入(2024最新版)
  • 破局与重构:深度解析“紧密型县域医共体”的业务、技术与商业机遇
  • Day 3 复盘:我为什么选择了 OpenClaw
  • 实测HY-MT1.5-1.8B:0.18秒翻译,效果媲美千亿大模型
  • 浦语灵笔2.5-7B算力优化:Flash Attention 2.7.3降低KV缓存开销37%
  • OpenClaw 安装与配置完整教程(Windows)
  • Qt 工业机器视觉开发
  • Vue 99 ,Vue 项目代理配置规范:跨域解决、路径重写与多环境适配最佳实践( 企业级避坑指南 )
  • 嵌入式开发中的状态机编程:如何用switch-case优化你的裸机代码
  • 程序员的时代结束了?2026年,软件开发正在被AI彻底重写
  • flyway执行无限等待
  • STC8G1K08A+ESP8266搭建猪场水压监测系统(附App Inventor源码)
  • Nunchaku-flux-1-dev开源贡献:在GitHub参与模型优化与插件开发
  • 振温传感器特征值及其作用
  • 微信照片过期打不开?那些回不去的旧时光
  • 红薯矮砧密植:水肥一体化系统铺设全指南
  • 硬件工程师必看!Allegro PCB批量转换PADS技巧:利用SKILL脚本实现自动化
  • DeerFlow API接口说明:与其他系统集成的技术细节
  • 什么是软件测试(20260316)
  • Spring Boot 启动时自动注入原理
  • 3D Face HRN在智能家居中的应用:个性化家庭助理形象定制