Python入门第六课

上节课程学习了关于Python中的面向对象基础部分,下面我们将继续学习Python的核心知识

一、异常

**异常:**就是程序运行过程中出现的错误,会中断程序的正常执行

1.1异常处理

**①不做处理:**整个程序因为一个BUG,中断执行

②捕获异常 :按照我们自己的处理方式,处理完程序继续运行

--捕获方式:

示例:

python 复制代码
# 异常
try:
    print("= = = = = = = = = = = = = = = = = = ")
    # print(my_name)
    print(1/0)
    print("= = = = = = = = = = = = = = = = = = ")
except NameError as e:
    print("名字不存在!异常信息:",e)
except ZeroDivisionError as e:
    print("除数不能为0!异常信息:",e)

1.2异常传递

异常传递就是异常在函数调用中层层上报的过程,直到有人处理它,或者程序奔溃

二、AI项目基础

大模型部署分为:

2.1本地部署

ollama是一个运行在本地、管理大语言模型的工具。官网:https://ollama.com

直接下载即可!!!然后可以在官网找到要下载的AI模型

我这里选择的时deepseek的r1模型,根据自己电脑的硬件情况来选择按照版本!

2.2官方开放 API

首先去deepseek官网创建一个APIkey,创建好的如下图所示:

2.3代码调用DeepSeek

在DeepSeek的API文档当中就有使用python代码调用deepseek,网址:https://api-docs.deepseek.com/zh-cn/

我把代码直接复制在这里:

python 复制代码
import os
from openai import OpenAI

# 创建与大模型交互的客户端对象
client = OpenAI(
    # DEEPSEEK_API_KEY是环境变量的名字,值就是DeepSeekAPIKey的值
    api_key=os.environ.get('DEEPSEEK_API_KEY'),
    base_url="https://api.deepseek.com")
# 与大模型进行交互
response = client.chat.completions.create(
    # 所调用的模型
    model="deepseek-v4-pro",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "你是谁"},
    ],
    stream=False,
    reasoning_effort="high",
    extra_body={"thinking": {"type": "enabled"}}
)
# 输出大模型返回的结果
print(response.choices[0].message.content)

2.4提示词工程

**提示词:**是引导大模型进行内容生成的命令

三、AI项目实战

3.1streamlit

以下是streamlit页面:

python 复制代码
import streamlit as st

st.title("stream第一个程序")
st.header("一级标题")
st.subheader("二级标题")

运行指令(在pycharm终端运行): streamlit run 文件名

3.1.1streamlit基础用法

我将streamlit的基础用法写在了python代码块中:

python 复制代码
# 段落文字
st.write("这是一段文字")
st.write("这是一段文字")
st.write("这是一段文字")
# 图片
st.image("../resources/logo.png",width=300)
# 音频
st.audio("../resources/news.mp3",width=300)
# 视频
st.video("../resources/news.mp4",width=300)
# logo
st.logo("../resources/logo.png")
# 表格

student_data = {
    "姓名": ["王林", "李慕婉", "贝罗", "莫厉海", "石萧"],
    "学号": ["20260001", "20260002", "20260003", "20260004", "20260005"],
    "语文": [98, 90, 59, 29, 80],
    "数学": [88, 78, 65, 70, 39],
    "英语": [99, 89, 87, 59, 62],
    "总分": [285, 257, 211, 158, 181]
}

st.table(student_data)
# 普通输入框
name = st.text_input("请输入")
st.write(name)
# 密码输入框
password = st.text_input("请输入密码:",type="password")
st.write(f"你输入的密码为:{password}")
# 单选按钮
st.radio("请输入您的性别",["男","女","未知"])
3.1.2streamlit页面布局
python 复制代码
# 设置页面的配置项
st.set_page_config(
    page_title="streamlit页面",
    page_icon="🧊",
    # 网页的布局
    layout="centered",
    # 控制侧边栏
    initial_sidebar_state="expanded",
    menu_items={
        'Get Help': 'https://www.extremelycoolapp.com/help',
        'Report a bug': "https://ollama.com",
        'About': "# This is a header. This is an *extremely* cool app!"
    }
)

3.2开发项目

AI伴侣

系统代码:

python 复制代码
import streamlit as st
import os
from openai import OpenAI
import datetime
import json

# 脚本文件所在目录(用于定位 logo 等资源文件,避免依赖运行时的当前工作目录)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

# 设置页面的配置项
st.set_page_config(
    page_title="AI智能伴侣 ",
    page_icon="🤖",
    # 网页的布局
    layout="wide",
    # 控制侧边栏
    initial_sidebar_state="expanded",
    menu_items={}
)

# 保存会话信息的函数
def save_session():

    if st.session_state.current_session:
        # 构建新的会话对象
        session_data = {
            "current_session": st.session_state.current_session,
            "messages": st.session_state.messages,
            "nick_name": st.session_state.nick_name,
            "personality": st.session_state.personality
        }

        # 如果session目录不存在,则创建
        if not os.path.exists("session"):
            os.makedirs("session")
        # 保存会话数据
        with open(f"session/{st.session_state.current_session}.json", "w", encoding="utf-8") as f:
            json.dump(session_data, f, ensure_ascii=False, indent=4)

# 加载所有的列表信息
def load_sessions():
    session_list = []
    #加载session目录下的所有json文件
    if os.path.exists("session"):
        file_list = os.listdir("session")
        for filename in file_list:
            if filename.endswith(".json"):
                session_list.append(filename[:-5])
    session_list.sort(reverse=True)#降序排序、
    return session_list

# 加载指定会话信息
def load_session(session_name):
    try:
        if os.path.exists(f"session/{session_name}.json"):
            # 读取会话数据
            with open(f"session/{session_name}.json", "r", encoding="utf-8") as f:
                session_data = json.load(f)
                st.session_state.messages = session_data["messages"]
                st.session_state.nick_name = session_data["nick_name"]
                st.session_state.personality = session_data["personality"]
                st.session_state.current_session = session_name
    except Exception:
        st.error("加载会话失败,请检查会话名称是否正确")

# 删除会话信息
def delete_session(session_name):
    try:
        if os.path.exists(f"session/{session_name}.json"):
            os.remove(f"session/{session_name}.json")
            #如果删除的是当前会话,则需要更新消息列表
            if session_name == st.session_state.current_session:
                st.session_state.messages = []
                st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
    except Exception:
        st.error("删除会话失败,请检查会话名称是否正确")


# 大标题
st.title("AI智能伴侣 ")
st.logo(os.path.join(BASE_DIR, "..", "resources", "logo.png"))
# 创建与大模型交互的客户端对象
client = OpenAI(
    api_key=os.environ.get('DEEPSEEK_API_KEY'),
    base_url="https://api.deepseek.com")
# 系统提示词
system_prompt = """
        你叫%s,现在是用户的真实伴侣,请完全代入伴侣角色。:
        规则:
            1. 每次只回1条消息
            2. 禁止任何场景或状态描述性文字
            3. 匹配用户的语言
            4. 回复简短,像微信聊天一样
            5. 有需要的话可以用❤️🌸等emoji表情
            6. 用符合伴侣性格的方式对话
            7. 回复的内容, 要充分体现伴侣的性格特征
        伴侣性格:
            - %s
        你必须严格遵守上述规则来回复用户。
    """
# 初始化聊天信息
if "messages" not in st.session_state:
    st.session_state.messages = []
# 昵称
if "nick_name" not in st.session_state:
    st.session_state.nick_name = "噜噜"
# 性格
if "personality" not in st.session_state:
    st.session_state.personality = "活泼开朗的东北姑娘"
# 会话标识
if "current_session" not in st.session_state:
    st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")


# 展示聊天信息
st.text(f"会话名称:{st.session_state.current_session}")
for message in st.session_state.messages:
    if message["role"] == "user":
        st.chat_message("user").write(message["content"])
    elif message["role"] == "assistant":
        st.chat_message("assistant").write(message["content"])
# 左侧的侧边栏
with st.sidebar:
    # 会话管理
    st.subheader("AI控制面板")
    # 新建会话
    if st.button("新建会话",width="stretch",icon="✒️"):
        # 1.保存当前会话信息
        save_session()
        #2.创建新的会话
        if st.session_state.messages:#如果聊天信息非空,True;否则,False
            st.session_state.messages = []
            st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
            save_session()
            # 重新运行当前页面
            st.rerun()
    # 会话历史
    st.text("会话历史")
    session_list = load_sessions()
    for session in session_list:
        col1,col2 = st.columns([4, 1])
        with col1:
            # 加载会话信息
            if st.button(session,width="stretch", icon="📃",key=f"load_{session}",type="primary" if session == st.session_state.current_session else "secondary"):
                load_session(session)
                st.rerun()
        with col2:
            # 删除会话
            if st.button("", width="stretch", icon="❎️",key=f"delete_{session}"):
                delete_session(session)
                st.rerun()

    #分割线
    st.divider()


    # 伴侣
    st.subheader("伴侣信息")
    # 昵称
    nick_name = st.text_input("昵称",placeholder="请输入昵称")
    if nick_name:
        st.session_state.nick_name = nick_name
    #性格
    personality = st.text_area("性格",placeholder="请输入性格")
    if personality:
        st.session_state.personality = personality



# 聊天消息的输入框
prompt = st.chat_input("请输入你要问的问题")
# 在if中,字符串会自动转换为bool值
if prompt:
    # 展示用户输入的问题
    st.chat_message("user").write(prompt)
    print("------------------------------>这是调用AI大模型,提示词:", prompt)
    # 添加用户消息到会话状态
    st.session_state.messages.append({"role": "user", "content": prompt})

    # 调用AI大模型
    response = client.chat.completions.create(
        model="deepseek-v4-pro",
        messages=[
            {"role": "system", "content": system_prompt % (st.session_state.nick_name, st.session_state.personality)},
            *st.session_state.messages
        ],
        stream=True
    )

    # 创建一个空的容器来显示大模型的返回结果
    response_message = st.empty()
    full_response = ""
    for chunk in response:
        if chunk.choices[0].delta.content is not None:
            content = chunk.choices[0].delta.content
            full_response += content
            response_message.chat_message("assistant").write(full_response)
    #保存大模型返回的结果
    st.session_state.messages.append({"role": "assistant", "content": full_response})
    #保存会话信息
    save_session()

3.3文件操作

**文件操作就是分为:**打开、读\写、关闭

读文件代码示例:

python 复制代码
# 读文件
# 1、打开文件
file = open("出师表.txt", "r", encoding="utf-8")
# 2、读取文件(一次性读取所有内容)
# content = file.read()
# 2、读取文件(一行生成)
content = file.readlines()
for line in content:
    print(line.strip())
# 3、关闭文件
file.close()

写文件代码示例:

python 复制代码
# 写文件
# 1、打开文件
file = open("静夜思.txt", "w", encoding="utf-8")
# 2、写文件
file.write("静夜思(李白)\n")
file.write("床前明月光,疑是地上霜。\n")
file.write("举头望明月,低头思故乡。\n")
# 3、关闭文件
file.close()
3.3.1资源释放

繁琐的方式:

简单的方式:

3.3.2json文件

写入json文件:

python 复制代码
# 写入json文件
import json
# 写入json数据文件
user = {
    "name": "张三",
    "age": 18,
    "hobby": ["看电影", "听音乐"]
}
with open("user.json","w",encoding="utf-8") as f:
    # 把user这个对象转化为json这个字符串写入f
    # ensure_ascii:默认为True,确保所有的输出的数据都是ascii编码,设置为False则输出中文
    # indent:设置缩进
    json.dump(user,f,ensure_ascii=False,indent=2)

读取json文件

python 复制代码
# 写入json文件
import json
# 读取json文件
with open("user.json","r",encoding="utf-8") as f:
    user = json.load(f)
    print(user)
    print(type(user))

以上就是本次第六课的全部内容!!!

相关推荐
CTA终结者1 小时前
先用小策略练清条件和动作
人工智能·python
Bruce_Liuxiaowei2 小时前
从零到可运行:基于 Vue3 + FastAPI + DeepSeek-V3 的 AI 英语单词学习系统全栈实战
人工智能·python·学习·fastapi·全栈·智能体
萧瑟余晖2 小时前
Java深入解析篇三十三之消息队列
java·开发语言
ValhallaCoder2 小时前
Leetcode-hot100(2026.08.17)
python·算法·leetcode
IT爱学堂2 小时前
尚硅谷Java+AI大模型应用开发革新版本 2025年3月
java·开发语言·人工智能
W_326002 小时前
Python-OpenCV图像像素与通道:通道拆分合并、深浅拷贝
图像处理·人工智能·python·opencv·机器学习
C++ 老炮儿的技术栈2 小时前
Qt5.9.1 Windows 完整开发环境搭建流程
开发语言·c++·windows·qt·编辑器·代码化
xcLeigh2 小时前
Go入门:无类型常量与类型常量的区别
服务器·开发语言·golang
泡沫冰@2 小时前
GO 语言基础
开发语言·算法·golang