feat(python基础): 完成基础综合项目

This commit is contained in:
zhiye.sun
2026-08-03 17:42:04 +08:00
parent 298e5b46ea
commit 42baf5d317
5 changed files with 706 additions and 127 deletions

View File

@@ -0,0 +1,194 @@
# 第 1-14 课完整示例:命令行 Agent 管理系统
#
# 本项目综合使用变量、字符串、列表、字典、条件判断、循环和函数。
# 建议先运行程序体验功能,再按照讲义中的开发顺序阅读代码。
def print_separator():
"""输出分隔线,让菜单和结果更容易阅读。"""
print("=" * 30)
def print_menu():
"""输出主菜单;本函数只负责显示,不需要返回值。"""
print_separator()
print("命令行 Agent 管理系统")
print("1. 查看全部 Agent")
print("2. 新增 Agent")
print("3. 修改 Agent 状态")
print("4. 删除 Agent")
print("5. 查看 Agent 工具")
print("0. 退出程序")
print_separator()
def get_status_text(enabled):
"""把布尔状态转换成适合显示的中文文本。"""
if enabled:
return "启用"
return "停用"
def print_agents(agents):
"""按照统一格式输出列表中的全部 Agent。"""
if not agents:
print("当前没有 Agent。")
return
print("全部 Agent")
for number, agent in enumerate(agents, start=1):
status_text = get_status_text(agent["enabled"])
print(
f"{number}. {agent['name']}"
f"模型:{agent['model']}"
f"状态:{status_text}"
)
def find_agent_by_name(agents, name):
"""按名称查找 Agent找到时返回字典否则返回 None。"""
for agent in agents:
if agent["name"] == name:
return agent
return None
def parse_tools(tools_text):
"""把英文逗号分隔的文本转换成没有空字符串的工具列表。"""
tools = []
for tool in tools_text.split(","):
clean_tool = tool.strip()
# 只添加非空工具,同时避免同一个工具重复出现。
if clean_tool and clean_tool not in tools:
tools.append(clean_tool)
return tools
def add_agent(agents):
"""接收用户输入,检查名称后新增 Agent。"""
name = input("请输入 Agent 名称:").strip()
if not name:
print("Agent 名称不能为空。")
return
if find_agent_by_name(agents, name) is not None:
print("该 Agent 已存在。")
return
model = input("请输入模型名称:").strip()
tools_text = input("请输入工具,多个工具使用英文逗号分隔:")
tools = parse_tools(tools_text)
new_agent = {
"name": name,
"model": model,
"enabled": True,
"tools": tools,
}
agents.append(new_agent)
print("Agent 新增成功。")
def change_agent_status(agents):
"""查找指定 Agent并反转它的启用状态。"""
name = input("请输入需要修改状态的 Agent 名称:").strip()
agent = find_agent_by_name(agents, name)
if agent is None:
print("未找到该 Agent。")
return
agent["enabled"] = not agent["enabled"]
status_text = get_status_text(agent["enabled"])
print(f"状态修改成功,当前状态:{status_text}")
def delete_agent(agents):
"""查找并删除指定 Agent。"""
name = input("请输入需要删除的 Agent 名称:").strip()
agent = find_agent_by_name(agents, name)
if agent is None:
print("未找到该 Agent。")
return
agents.remove(agent)
print("Agent 已删除。")
def print_agent_tools(agents):
"""输出指定 Agent 的全部工具。"""
name = input("请输入需要查看工具的 Agent 名称:").strip()
agent = find_agent_by_name(agents, name)
if agent is None:
print("未找到该 Agent。")
return
tools = agent.get("tools", [])
if not tools:
print("该 Agent 暂无工具。")
return
print(f"{agent['name']}的工具:")
for number, tool in enumerate(tools, start=1):
print(f"{number}. {tool}")
def create_initial_agents():
"""创建程序启动时使用的初始 Agent 数据。"""
return [
{
"name": "代码助手",
"model": "gpt-5",
"enabled": True,
"tools": ["搜索", "终端"],
},
{
"name": "聊天助手",
"model": "o3",
"enabled": False,
"tools": ["搜索"],
},
]
def main():
"""创建数据并通过循环组织整个菜单流程。"""
agents = create_initial_agents()
while True:
print_menu()
choice = input("请输入菜单编号:").strip()
if choice == "1":
print_agents(agents)
elif choice == "2":
add_agent(agents)
elif choice == "3":
change_agent_status(agents)
elif choice == "4":
delete_agent(agents)
elif choice == "5":
print_agent_tools(agents)
elif choice == "0":
print("程序已退出。")
break
else:
print("无效选项,请重新输入。")
# 只有直接运行当前文件时才启动菜单。
# 后续“模块与包”课程会进一步解释 __name__ 的作用。
if __name__ == "__main__":
main()