pycharm实现skills示例
文章目录步骤报错 未找到技能: python步骤1、新建一个项目名称为skills_demo2、在项目根目录下创建一个名为 main.py 的文件并将以下代码复制进去代码importjsonimportosfromdataclassesimportdataclass,asdictfromenumimportEnumfromtypingimportList,Optional# 1. 定义技能类别枚举classSkillCategory(Enum):PROGRAMMING编程LANGUAGE语言SOFT_SKILL软技能DESIGN设计# 2. 定义技能数据类 (Dataclass)dataclassclassSkill:name:strcategory:SkillCategory level:int1# 默认等级为 1xp:int0# 当前经验值# 升级所需的经验公式当前等级 * 100defxp_needed(self)-int:returnself.level*100defadd_xp(self,amount:int)-bool:添加经验值如果升级返回 Trueself.xpamount leveled_upFalse# 检查是否升级可能一次加很多经验连升多级whileself.xpself.xp_needed()andself.level10:self.xp-self.xp_needed()self.level1leveled_upTrueprint(f 恭喜[{self.name}] 升级到了 Lv.{self.level})ifself.level10:self.xp0# 满级后经验清零或保留这里设为清零returnleveled_updefget_power_score(self)-float:计算该技能的战力贡献 (等级^1.5)returnself.level**1.5defto_dict(self)-dict:转换为字典以便保存 JSONdataasdict(self)data[category]self.category.value# 保存枚举的值而不是对象returndata# 3. 定义技能管理器classSkillManager:def__init__(self,save_file:strskills_data.json):self.save_filesave_file self.skills:List[Skill][]self.load_skills()defadd_skill(self,name:str,category:SkillCategory):new_skillSkill(namename,categorycategory)self.skills.append(new_skill)print(f✅ 已添加新技能:{name}({category.value}))deflist_skills(self):ifnotself.skills:print( 还没有任何技能快去添加吧)returnprint(\n--- 我的技能树 ---)total_power0forsinself.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_powers.get_power_score()print(f---------------------)print(f⚡ 总战力评分:{total_power:.2f})print(---------------------\n)deftrain_skill(self,skill_name:str,xp_amount:int):foundFalseforsinself.skills:ifs.nameskill_name:s.add_xp(xp_amount)foundTruebreakifnotfound:print(f❌ 未找到技能:{skill_name})defsave_skills(self):data[s.to_dict()forsinself.skills]withopen(self.save_file,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)print(f 技能数据已保存至{self.save_file})defload_skills(self):ifnotos.path.exists(self.save_file):returntry:withopen(self.save_file,r,encodingutf-8)asf:datajson.load(f)self.skills[]foritemindata:# 恢复枚举类型cat_enumSkillCategory(item[category])skillSkill(nameitem[name],categorycat_enum,levelitem[level],xpitem[xp])self.skills.append(skill)print(f 已加载{len(self.skills)}个技能。)exceptExceptionase:print(f⚠️ 加载数据失败:{e})# 4. 主程序入口defmain():managerSkillManager()# 如果是第一次运行添加一些示例数据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. 保存并退出)choiceinput(请选择操作 (1-4): ).strip()ifchoice1:manager.list_skills()elifchoice2:nameinput(输入技能名称: ).strip()try:xpint(input(输入获得的经验值: ).strip())manager.train_skill(name,xp)exceptValueError:print(❌ 经验值必须是数字)elifchoice3:nameinput(输入新技能名称: ).strip()print(类别: 1.编程 2.语言 3.软技能 4.设计)cat_idxinput(选择类别编号 (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(❌ 无效的类别)elifchoice4: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.coloradmin.cn/o/2417966.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!