文章目录
-
- [报错 未找到技能: python](#报错 未找到技能: python)
步骤
1、新建一个项目,名称为:skills_demo
2、在项目根目录下,创建一个名为 main.py 的文件,并将以下代码复制进去,代码:
py
import json
import os
from dataclasses import dataclass, asdict
from enum import Enum
from typing import List, Optional
# 1. 定义技能类别枚举
class SkillCategory(Enum):
PROGRAMMING = "编程"
LANGUAGE = "语言"
SOFT_SKILL = "软技能"
DESIGN = "设计"
# 2. 定义技能数据类 (Dataclass)
@dataclass
class Skill:
name: str
category: SkillCategory
level: int = 1 # 默认等级为 1
xp: int = 0 # 当前经验值
# 升级所需的经验公式:当前等级 * 100
def xp_needed(self) -> int:
return self.level * 100
def add_xp(self, amount: int) -> bool:
"""添加经验值,如果升级返回 True"""
self.xp += amount
leveled_up = False
# 检查是否升级(可能一次加很多经验,连升多级)
while self.xp >= self.xp_needed() and self.level < 10:
self.xp -= self.xp_needed()
self.level += 1
leveled_up = True
print(f"🎉 恭喜![{self.name}] 升级到了 Lv.{self.level}")
if self.level >= 10:
self.xp = 0 # 满级后经验清零或保留,这里设为清零
return leveled_up
def get_power_score(self) -> float:
"""计算该技能的战力贡献 (等级^1.5)"""
return self.level ** 1.5
def to_dict(self) -> dict:
"""转换为字典以便保存 JSON"""
data = asdict(self)
data['category'] = self.category.value # 保存枚举的值而不是对象
return data
# 3. 定义技能管理器
class SkillManager:
def __init__(self, save_file: str = "skills_data.json"):
self.save_file = save_file
self.skills: List[Skill] = []
self.load_skills()
def add_skill(self, name: str, category: SkillCategory):
new_skill = Skill(name=name, category=category)
self.skills.append(new_skill)
print(f"✅ 已添加新技能: {name} ({category.value})")
def list_skills(self):
if not self.skills:
print("💤 还没有任何技能,快去添加吧!")
return
print("\n--- 📜 我的技能树 ---")
total_power = 0
for s in self.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")
def train_skill(self, skill_name: str, xp_amount: int):
found = False
for s in self.skills:
if s.name == skill_name:
s.add_xp(xp_amount)
found = True
break
if not found:
print(f"❌ 未找到技能: {skill_name}")
def save_skills(self):
data = [s.to_dict() for s in self.skills]
with open(self.save_file, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"💾 技能数据已保存至 {self.save_file}")
def load_skills(self):
if not os.path.exists(self.save_file):
return
try:
with open(self.save_file, 'r', encoding='utf-8') as f:
data = json.load(f)
self.skills = []
for item in data:
# 恢复枚举类型
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)} 个技能。")
except Exception as e:
print(f"⚠️ 加载数据失败: {e}")
# 4. 主程序入口
def main():
manager = SkillManager()
# 如果是第一次运行,添加一些示例数据
if len(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)
# 交互式菜单
while True:
print("1. 查看技能树")
print("2. 训练技能 (加经验)")
print("3. 添加新技能")
print("4. 保存并退出")
choice = input("请选择操作 (1-4): ").strip()
if choice == '1':
manager.list_skills()
elif choice == '2':
name = input("输入技能名称: ").strip()
try:
xp = int(input("输入获得的经验值: ").strip())
manager.train_skill(name, xp)
except ValueError:
print("❌ 经验值必须是数字!")
elif choice == '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}
if cat_idx in cat_map:
manager.add_skill(name, cat_map[cat_idx])
else:
print("❌ 无效的类别")
elif choice == '4':
manager.save_skills()
print("👋 再见!")
break
else:
print("❌ 无效输入")
if __name__ == "__main__":
main()
3、在 main.py 编辑区域点击右键,点 运行,你会看到终端(Terminal)输出初始化的技能树。
4、交互测试
(1)在下方控制台输入 1 查看列表。
输入 2,然后输入 Python,再输入 200,观察它是否升级。
输入 4 保存退出。
(2)验证数据持久化:
再次运行程序(不要修改代码),你会发现它自动加载了你上次保存的数据,并且没有重新初始化那些默认数据。
你可以在左侧项目栏看到生成的 skills_data.json 文件,点开看看里面的数据结构。
报错 未找到技能: python
是因为代码中的名称为Python,大小写不一样,训练的时候终端输入改为Python即可。