AI辅助编程入门指南:从环境搭建到第一个智能脚本

原创 发布日期:
7

AI辅助编程入门指南:从环境搭建到第一个智能脚本

引言:当“Hello World”变成了“Hello AI”🌍

还记得第一次写 print("Hello, World!") 时的激动吗?那一刻,仿佛亲手敲开了通往数字宇宙的大门。🚪

但如今,编程的门槛正在被AI“一脚踹开”。🚪💥 新手程序员可能还没完全搞懂“变量到底是啥”,就已经靠AI助手写出了能爬数据、画图表、自动发邮件的脚本;老开发者则从“重复搬砖”中解放,把精力放在更核心的逻辑设计上。

这不是魔法,而是 AI辅助编程(AI-Powered Programming)——2025年最值得掌握的技能之一。它不是让AI“替你写代码”,而是让AI成为你的“全能搭档”:帮你补全语法、排查bug、生成测试,甚至提供架构思路。

本文将手把手带你完成从“编程小白”到“AI编程玩家”的蜕变:

  • ✅ 搭建适配AI工具的开发环境(避坑版)

  • ✅ 安装并玩转主流AI编程工具(附对比表)

  • ✅ 编写第一个“能干活”的智能脚本(天气预警+邮件推送)

  • ✅ 掌握AI编程避坑指南(别让AI坑了你)

  • ✅ 解锁5个进阶技巧+3个实战场景(从“能用”到“好用”)

准备好了吗?系好安全带,咱们发车!🚀

AI辅助编程入门指南:从环境搭建到第一个智能脚本

第一章:环境搭建——打造你的“AI编程战车”🛠️

AI编程的核心是“工具链协同”,环境搭建不仅要“能用”,更要“顺手”。这一章会带你避开新手常踩的坑,配置一套高效的AI编程环境。

1.1 选择你的“操作系统”💻

AI编程工具对系统兼容性较好,但不同系统的“开发体验”差异明显。选对系统,能少走50%的弯路。

系统 优点 缺点 推荐指数 适合人群
Windows 10/11 软件生态丰富,AI工具(如Copilot、Cursor)无缝兼容;支持WSL2(Linux子系统),兼顾Windows易用性和Linux开发能力 原生命令行体验差;部分Linux专属AI工具(如本地大模型部署)需额外配置 ⭐⭐⭐⭐ 零基础新手、需要兼顾办公软件的开发者
macOS 终端体验极佳,与Python、AI工具兼容性拉满;M系列芯片对本地大模型(如Llama 3)的运行效率高 价格昂贵;部分Windows专属工具(如某些企业级AI插件)无法使用 ⭐⭐⭐⭐⭐ 追求开发效率的程序员、苹果生态用户
Linux(Ubuntu 22.04) 开发者天堂,支持所有AI工具和本地大模型部署;命令行操作高效,适合自动化脚本 桌面生态较弱,新手可能被命令行“劝退”;部分GUI类AI工具适配一般 ⭐⭐⭐⭐ 有一定命令行基础、需部署本地AI模型的开发者

📌 新手闭眼选方案:Windows 11 + WSL2(安装教程见微软官方指南),既能用Windows的图形界面,又能享受Linux的开发环境;预算充足直接上macOS,一步到位。

1.2 安装Python——AI时代的“编程语言母语”🐍

Python是AI编程的“通用语言”,无论是调用API、处理数据,还是部署模型,都离不开它。务必安装3.10及以上版本(很多AI库已不再支持旧版本)。

方法一:官网下载(最稳,适合新手)

  1. 访问 Python官网,下载最新版(推荐3.11或3.12,兼容性最佳)。

  2. 安装时必须勾选两个选项(否则后续会哭着重装):

    • ✅ Add Python to PATH(让系统能找到Python)

    • ✅ Install pip(Python的包管理工具,用来装AI库)

💬 “不勾PATH?那你以后每次运行Python都要手动输全路径,比如 C:\Users\你的名字\AppData\Local\Programs\Python\Python312\python.exe……别问我怎么知道的,都是血泪教训。” 😅

方法二:包管理器(高级玩家,一键搞定)

  • macOS:用Homebrew(先安装Homebrew

    brew install python@3.12
  • Ubuntu/Debian

    sudo apt update && sudo apt install python3.12 python3-pip
  • Windows:用Winget(Win11自带,Win10需手动安装)

    winget install --id Python.Python.3.12

验证安装(关键一步)

打开终端(Windows用PowerShell,macOS/Linux用Terminal),输入以下命令:

python --version  # 或 python3 --version(部分系统)
pip --version     # 或 pip3 --version

如果输出类似以下内容,说明安装成功:

Python 3.12.4
pip 24.0 from /usr/local/lib/python3.12/site-packages/pip (python 3.12)

📌 踩坑提示:如果出现“python不是内部或外部命令”,说明没勾Add Python to PATH,卸载后重新安装并勾选即可。

1.3 安装代码编辑器——你的“AI指挥台”⌨️

AI编程离不开“智能编辑器”,好的编辑器能让AI工具(如Copilot)发挥最大威力。以下三款是目前最主流的选择,各有侧重:

1. Visual Studio Code(VS Code)—— 全能王者👑

  • 核心优势:免费开源、插件生态爆炸、轻量高效,支持所有AI编程工具(Copilot、Codeium等)。

  • 适合人群:所有人(新手、老手、全栈开发者)。

  • 👉 下载地址

  • 必装插件(AI编程必备):

    • Python:微软官方插件,提供语法高亮、调试功能。

    • Pylance:AI驱动的智能补全,比默认补全强10倍。

    • GitHub Copilot:AI代码生成核心插件。

    • Bracket Pair Colorizer 2:彩色括号,再也不眼花。

    • Code Runner:一键运行代码,省去终端输入命令的麻烦。

2. PyCharm(Community版)—— Python专家💼

  • 核心优势:专为Python优化,调试、重构、测试功能一体化,对大型Python项目(如AI模型训练)支持更好。

  • 适合人群:专注Python开发、需要复杂调试功能的开发者。

  • 👉 下载地址(Community版免费)

  • AI增强插件

    • GitHub Copilot:在PyCharm中直接启用,配置与VS Code一致。

    • AI Assistant:JetBrains官方AI工具,支持代码解释、文档生成。

3. Cursor—— AI原生编辑器🚀

  • 核心优势:专为AI编程设计,内置ChatGPT/Claude接口,支持“代码生成-重构-解释”一条龙,不用切换窗口。

  • 适合人群:重度依赖AI写代码、追求极致效率的开发者。

  • 👉 官网

  • 特色功能

    • Cmd+K(Mac)/Ctrl+K(Windows):直接召唤AI对话,修改当前代码。

    • AI Refactor:一键让AI重构选中代码,优化性能和可读性。

    • Context Aware:自动识别代码上下文,生成更贴合需求的内容。

💬 “VS Code像瑞士军刀,啥都能做;PyCharm像专业手术刀,专攻Python;Cursor像魔法杖,全程靠AI开挂。新手从VS Code入手准没错,生态最成熟,踩坑最少。” ✨

1.4 配置虚拟环境——别让你的系统“变脏”🧫

Python项目多了,最头疼的问题就是“依赖冲突”:比如项目A需要requests==2.25.0,项目B需要requests==2.32.0,直接装在系统里会互相干扰。虚拟环境就是解决这个问题的“神器”——为每个项目创建独立的“小环境”,包的安装、升级互不影响。

步骤1:创建虚拟环境

  1. 先新建一个项目文件夹(比如ai_programming),并进入该文件夹:

    mkdir ai_programming  # 创建文件夹
    cd ai_programming     # 进入文件夹
  2. 创建虚拟环境(环境名推荐用venv,简单好记):

    python -m venv venv  # 第一个venv是命令,第二个venv是环境名

    执行后,文件夹里会多出一个venv文件夹,这就是你的独立环境。

步骤2:激活虚拟环境

  • Windows(PowerShell)

    .\venv\Scripts\Activate.ps1

    🔔 提示:如果出现“无法加载脚本”,右键PowerShell图标,选择“以管理员身份运行”,执行Set-ExecutionPolicy RemoteSigned,输入Y确认即可。

  • macOS/Linux(Terminal)

    source venv/bin/activate

激活成功后,终端前面会出现(venv)标识,比如:

(venv) user@MacBook-Pro ai_programming %

步骤3:安装依赖(在虚拟环境中)

激活后,用pip安装的所有包都会保存在venv文件夹里,不影响系统Python:

pip install requests pandas numpy openai  # 安装常用AI相关库

步骤4:保存依赖(最佳实践)

开发完成后,把项目依赖保存到requirements.txt文件,方便别人复现你的环境:

pip freeze > requirements.txt

别人拿到项目后,只需执行以下命令,就能一键安装所有依赖:

pip install -r requirements.txt

步骤5:退出虚拟环境

不需要时,输入以下命令退出:

deactivate

📌 铁律:每个AI编程项目都必须创建独立虚拟环境!别嫌麻烦,这能帮你避开90%的“包版本冲突”问题。

AI辅助编程入门指南:从环境搭建到第一个智能脚本

第二章:AI编程工具安装——召唤你的“代码精灵”🧫‍♂️

AI编程的核心是“选对工具”。目前主流的AI编程工具分为两类:实时补全类(如Copilot)和对话生成类(如ChatGPT)。前者适合写代码时“随写随补”,后者适合生成完整脚本、解决复杂问题。

2.1 GitHub Copilot——你的“AI结对编程伙伴”👨‍💻

GitHub Copilot是目前最流行的AI编程工具,由GitHub和OpenAI联合开发,本质是“实时代码补全+生成”,能像“预言家”一样猜你接下来要写的代码。

核心功能(为什么它这么火?)

  • 实时代码补全:输入注释或开头代码,Copilot自动续写,支持Python、Java、JavaScript等几十种语言。

  • 函数/类生成:输入函数名和注释,比如# 计算斐波那契数列第n项,Copilot直接生成完整函数。

  • 单元测试自动生成:写好业务代码后,输入# 为上述函数写单元测试,自动生成测试用例。

  • 注释生成:选中代码,右键选择“Copilot: Generate Docs”,自动生成函数注释(支持中文)。

安装步骤(以VS Code为例)

  1. 访问 GitHub Copilot官网,点击“Start free trial”(学生、教师可免费使用,需验证身份)。

  2. 在VS Code中打开“扩展”面板(快捷键Ctrl+Shift+X),搜索“GitHub Copilot”,点击“安装”。

  3. 安装完成后,点击左下角的“登录GitHub”,授权Copilot访问你的GitHub账号。

  4. 授权成功后,Copilot会自动启用,代码编辑时会显示灰色的“建议代码”,按Tab键即可接受。

实战示例(感受Copilot的威力)

在VS Code中新建test_copilot.py文件,输入以下注释和函数开头:

# 功能:判断一个数是否为质数
# 参数:n - 正整数
# 返回:True(是质数)或 False(不是质数)
def is_prime(n):

Copilot会立即给出建议代码(灰色显示),按Tab接受后,完整代码如下:

# 功能:判断一个数是否为质数
# 参数:n - 正整数
# 返回:True(是质数)或 False(不是质数)
def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True

甚至不用写注释,只写函数名def is_prime(n):,Copilot也能生成正确代码!

💬 “Copilot不是‘写代码’,而是‘猜你想写什么代码’。用熟了之后,写代码速度至少翻倍,再也不用记复杂的算法实现了。” 🚀

2.2 对话式AI工具——你的“代码顾问”与“问题 solver”🧠

实时补全工具(如Copilot)适合“边写边补”,而对话式AI(如ChatGPT、Claude)适合“解决具体问题”:生成完整脚本、解释复杂代码、排查bug等。

1. ChatGPT(OpenAI)—— 综合能力最强

  • 核心优势:生成代码质量高,支持多轮对话优化,对Python生态(如数据分析、API调用)理解深入。

  • 使用场景:生成完整脚本、解释代码逻辑、调试错误、学习新库用法。

  • 👉 访问地址:https://chat.openai.com(需科学上网,免费版可用,Plus版响应更快)

  • 最佳使用技巧

    • 提供“上下文”:比如“我正在用Python写一个天气预警脚本,已经获取了天气数据,现在需要添加邮件发送功能,用smtplib实现”。

    • 要求“分步实现”:复杂需求可以拆分成“第一步获取数据,第二步判断天气,第三步发送邮件”,让AI逐步生成。

    • 追问“为什么”:生成代码后,加一句“解释一下这段代码中smtplib的使用逻辑”,加深理解。

2. Claude(Anthropic)—— 长文本与逻辑王者

  • 核心优势:上下文窗口极大(免费版支持10万token,约7.5万字),能处理整个代码文件,逻辑推理能力强,适合复杂项目重构。

  • 使用场景:上传完整代码文件优化、审查大型脚本、生成详细文档。

  • 👉 访问地址:https://claude.ai(免费版可用,支持中文)

  • 独家功能

    • 直接上传代码文件(.py、.txt等),让Claude分析并优化。

    • 生成“逐行注释”:上传一段无注释代码,要求“为每一行添加中文注释,解释作用”。

3. 国内替代工具(无需科学上网)

如果无法访问国外工具,以下国内AI同样能满足需求:

实战示例:用ChatGPT生成完整脚本

向ChatGPT输入以下提示词(Prompt):

“用Python写一个脚本,功能:1. 调用免费天气API获取上海当前天气;2. 判断是否下雨(包括小雨、中雨等);3. 如果下雨,用QQ邮箱发送提醒邮件给指定地址;4. 添加异常处理(比如API请求失败、邮件发送失败);5. 输出详细日志。”

ChatGPT会生成包含注释的完整代码,并给出使用步骤(如获取API密钥、开启QQ邮箱SMTP服务)。只需按提示替换配置(如API密钥、邮箱账号),就能直接运行!

2.3 其他AI编程工具推荐(按需选择)

除了主流工具,这些“小众但好用”的工具能解决特定场景的问题:

工具 核心优势 适用场景 访问地址
Codeium 完全免费,支持实时补全、代码解释、重构,无使用次数限制 不想付费的用户,替代Copilothttps://codeium.com
Tabnine 支持本地部署(数据不联网),保护代码隐私 处理敏感项目(如公司内部代码)https://tabnine.com
Phind 开发者专用搜索引擎,结合AI直接给出代码解决方案 遇到bug时,“搜问题+得代码”一步到位https://phind.com
Amazon CodeWhisperer 与AWS生态深度集成,适合在AWS上开发AI项目 用AWS服务(如S3、Lambda)的开发者https://aws.amazon.com/codewhisperer
CodeGeeX(智谱AI) 支持多语言代码生成,中文提示词优化好,免费版可用 国内用户,偏好中文交互https://codegeex.cn

📌 工具选择建议:新手优先用“VS Code + Copilot + ChatGPT”组合,覆盖90%的AI编程场景;有隐私需求选Tabnine,用AWS选CodeWhisperer,完全免费选Codeium。

AI辅助编程入门指南:从环境搭建到第一个智能脚本

第三章:编写第一个智能脚本——从“零”到“英雄”🦸‍♂️

理论讲得再多,不如亲手写一个能“干活”的脚本。本章我们将开发一个**“天气预警小助手”**:自动获取天气、判断是否下雨、发送邮件提醒,全程用AI辅助完成,零基础也能搞定!

3.1 需求拆解:把“大目标”拆成“小步骤”🎯

复杂功能之所以难,是因为没拆解开。我们把“天气预警小助手”拆成4个可执行的小步骤:

  1. 获取天气数据:调用免费天气API,拿到当前城市的天气(如“小雨”“晴”)和温度。

  2. 判断是否需要提醒:如果天气包含“雨”(小雨、中雨等),触发提醒;否则不动作。

  3. 发送邮件提醒:用SMTP协议(支持QQ邮箱、Gmail等)发送带天气信息的提醒邮件。

  4. 异常处理与日志:处理API请求失败、邮件发送失败等问题,输出清晰日志,方便排查。

💡 AI提示技巧:拆解步骤后,可以把每个步骤单独交给AI生成代码,再拼接整合。比如先让AI写“获取天气数据”的函数,测试通过后,再写“发送邮件”的函数。

3.2 第一步:获取天气数据(AI帮你调API)☁️

要获取天气数据,需要调用“免费天气API”。我们用OpenWeatherMap(全球通用,免费额度足够个人使用),AI会帮我们搞定API调用的所有细节。

步骤1:获取API密钥(免费)

  1. 访问 OpenWeatherMap官网,用邮箱注册账号(免费)。

  2. 登录后,点击右上角头像 → “My API Keys” → 输入Key名称(如“weather_alert”)→ 点击“Generate”。

  3. 生成的API Key(一串字母+数字,如abc123xyz789)保存好,后面要用。

    🔔 注意:API Key生成后需要等10-15分钟生效,否则会提示“权限不足”。

步骤2:让AI生成“获取天气”函数

打开ChatGPT,输入以下提示词(越具体越好):

“用Python写一个函数get_weather(city, api_key),功能:调用OpenWeatherMap的API获取指定城市的当前天气。要求:1. 返回天气状况(如‘Rain’)和温度(摄氏度);2. 支持中文城市名;3. 添加异常处理(网络错误、API返回错误);4. 使用requests库;5. 输出详细日志(比如‘正在获取北京天气’‘获取成功,温度22℃’)。”

ChatGPT会生成类似以下的代码,并附带使用说明:

import requests
import logging

# 配置日志(输出时间、日志级别、内容)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def get_weather(city, api_key):
    """
    获取指定城市的当前天气和温度
    :param city: 中文城市名(如“北京”)
    :param api_key: OpenWeatherMap的API密钥
    :return: (weather: str, temp: float) | (None, None) 失败时返回(None, None)
    """
    # API请求URL(units=metric表示温度单位为摄氏度,lang=zh_cn表示返回中文信息)
    base_url = "http://api.openweathermap.org/data/2.5/weather"
    params = {
        "q": city,
        "appid": api_key,
        "units": "metric",
        "lang": "zh_cn"
    }

    try:
        logging.info(f"正在获取【{{C}{C}{C}city}】的天气数据...")
        # 发送GET请求,设置超时时间10秒(避免卡死)
        response = requests.get(base_url, params=params, timeout=10)
        # 检查响应状态码:200表示成功,非200表示失败
        response.raise_for_status()
        
        # 解析JSON响应
        data = response.json()
        # 提取天气状况(main字段:如“Rain”“Clear”)和温度(temp字段)
        weather = data["weather"][0]["main"]
        temp = round(data["main"]["temp"], 1)  # 保留1位小数
        
        logging.info(f"【{{C}{C}{C}city}】天气获取成功:天气={{C}{C}{C}weather},温度={{C}{C}{C}temp}℃")
        return weather, temp

    except requests.exceptions.RequestException as e:
        # 捕获网络错误(如超时、无网络)
        logging.error(f"获取【{{C}{C}{C}city}】天气失败:网络错误 - {{C}{C}{C}str(e)}")
        return None, None
    except KeyError as e:
        # 捕获JSON解析错误(API返回格式异常)
        logging.error(f"获取【{{C}{C}{C}city}】天气失败:数据格式错误 - 缺少字段{{C}{C}{C}e}")
        return None, None
    except Exception as e:
        # 捕获其他未知错误
        logging.error(f"获取【{{C}{C}{C}city}】天气失败:未知错误 - {{C}{C}{C}str(e)}")
        return None, None

# 测试函数(替换为你的API密钥和城市)
if __name__ == "__main__":
    API_KEY = "你的OpenWeatherMap API密钥"
    CITY = "上海"
    weather, temp = get_weather(CITY, API_KEY)
    if weather and temp:
        print(f"测试结果:{{C}{C}{C}CITY}当前天气{{C}{C}{C}weather},温度{{C}{C}{C}temp}℃")
    else:
        print("测试失败,请检查API密钥或网络")

步骤3:测试“获取天气”函数

  1. 在虚拟环境中安装requests库(AI生成的代码依赖它):

    pip install requests
  2. 把代码中的API_KEY替换为你自己的密钥,CITY改为你所在的城市(如“广州”)。

  3. 运行脚本,若输出类似以下内容,说明功能正常:

    2025-09-18 14:30:00,123 - INFO - 正在获取【上海】的天气数据...
    2025-09-18 14:30:01,456 - INFO - 【上海】天气获取成功:天气=Rain,温度=22.5℃
    测试结果:上海当前天气Rain,温度22.5℃

3.3 第二步:发送邮件提醒(AI教你用SMTP)📧

接下来实现“发送邮件”功能。我们用QQ邮箱(国内用户最方便,无需科学上网),需要先开启SMTP服务并获取授权码。

步骤1:开启QQ邮箱SMTP服务(关键配置)

  1. 登录QQ邮箱 → 点击右上角“设置” → 选择“账户”选项卡。

  2. 下拉找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”,开启“POP3/SMTP服务”。

  3. 按提示发送短信验证,验证后会获得一个16位授权码(如abcdefghijklmnop),保存好(这不是QQ密码,是邮件客户端专用密码)。

步骤2:让AI生成“发送邮件”函数

向ChatGPT输入提示词:

“用Python写一个函数send_rain_alert(recipient_email, weather, temp, city),功能:当检测到下雨时,发送邮件提醒。要求:1. 使用QQ邮箱SMTP服务器(smtp.qq.com,端口587);2. 发件人邮箱为我的QQ邮箱,密码用SMTP授权码;3. 邮件主题包含‘下雨提醒’,正文显示城市、天气、温度和带伞建议;4. 添加异常处理(如登录失败、发送失败);5. 输出日志。”

ChatGPT生成的代码如下(需替换发件人信息):

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import logging

# 发件人配置(替换为你的信息)
SENDER_EMAIL = "你的QQ邮箱@qq.com"  # 如123456@qq.com
SENDER_AUTH_CODE = "你的QQ邮箱SMTP授权码"  # 16位字符串

def send_rain_alert(recipient_email, weather, temp, city):
    """
    发送下雨提醒邮件
    :param recipient_email: 收件人邮箱(如xxx@example.com)
    :param weather: 当前天气(如“Rain”)
    :param temp: 当前温度(摄氏度)
    :param city: 城市名
    :return: bool - 发送成功返回True,失败返回False
    """
    # 构建邮件内容
    msg = MIMEMultipart()
    msg["From"] = SENDER_EMAIL
    msg["To"] = recipient_email
    msg["Subject"] = f"🌧️ 【{{C}{C}{C}city}】今日有雨,记得带伞!"  # 邮件主题

    # 邮件正文(支持换行)
    email_body = f"""
    亲爱的用户:

    您好!根据最新天气预报,【{city}】今日天气状况如下:
    • 天气:{weather}
    • 温度:{temp}℃

    由于检测到降雨,建议您出门时携带雨具,注意路滑和交通安全。

    祝您度过愉快的一天!
    —— 天气预警小助手
    """
    # 把正文添加到邮件中,指定编码为utf-8(避免中文乱码)
    msg.attach(MIMEText(email_body, "plain", "utf-8"))

    try:
        logging.info(f"正在向【{{C}{C}{C}recipient_email}】发送下雨提醒邮件...")
        # 连接QQ邮箱SMTP服务器
        with smtplib.SMTP("smtp.qq.com", 587) as server:
            server.starttls()  # 启用TLS加密(安全连接)
            # 登录SMTP服务器(用授权码而非QQ密码)
            server.login(SENDER_EMAIL, SENDER_AUTH_CODE)
            # 发送邮件(将MIMEMultipart对象转为字符串)
            server.send_message(msg)
        
        logging.info(f"邮件发送成功!收件人:{{C}{C}{C}recipient_email}")
        return True

    except smtplib.SMTPAuthenticationError:
        logging.error("邮件发送失败:SMTP登录失败,请检查发件人邮箱和授权码是否正确")
        return False
    except smtplib.SMTPException as e:
        logging.error(f"邮件发送失败:SMTP服务错误 - {{C}{C}{C}str(e)}")
        return False
    except Exception as e:
        logging.error(f"邮件发送失败:未知错误 - {{C}{C}{C}str(e)}")
        return False

# 测试函数
if __name__ == "__main__":
    # 测试发送(替换为收件人邮箱)
    send_rain_alert(
        recipient_email="你的收件人邮箱@example.com",
        weather="Rain",
        temp=22.5,
        city="上海"
    )

步骤3:测试“发送邮件”函数

  1. 替换代码中的SENDER_EMAIL(你的QQ邮箱)和SENDER_AUTH_CODE(16位授权码)。

  2. 替换测试部分的recipient_email(可以填自己的另一个邮箱,方便测试)。

  3. 运行脚本,若收到邮件,说明功能正常!

3.4 第三步:整合脚本(把零件拼成整机)🧩

现在,我们有了“获取天气”和“发送邮件”两个核心函数,接下来要做的是:

  1. 读取配置(城市、API密钥、收件人邮箱等,集中管理,方便修改)。

  2. 串联逻辑:先获取天气 → 判断是否下雨 → 下雨则发送邮件。

  3. 添加主函数main(),让脚本可以直接运行。

完整脚本代码(带详细注释)

创建weather_alert.py文件,粘贴以下代码(替换所有“你的xxx”配置):

import requests
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import logging

# ======================== 配置区(请替换为你的信息) ========================
OPENWEATHER_API_KEY = "你的OpenWeatherMap API密钥"  # 如"abc123xyz789"
TARGET_CITY = "上海"  # 你要查询的城市
RECIPIENT_EMAIL = "收件人邮箱@example.com"  # 接收提醒的邮箱
SENDER_EMAIL = "你的QQ邮箱@qq.com"  # 发件人QQ邮箱(如"123456@qq.com")
SENDER_AUTH_CODE = "你的QQ邮箱SMTP授权码"  # QQ邮箱16位授权码
# ===========================================================================

# 配置日志(输出到控制台,包含时间、级别、内容)
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S"
)

def get_weather(city, api_key):
    """获取指定城市的天气和温度"""
    base_url = "http://api.openweathermap.org/data/2.5/weather"
    params = {
        "q": city,
        "appid": api_key,
        "units": "metric",
        "lang": "zh_cn"
    }

    try:
        logging.info(f"开始查询【{{C}{C}{C}city}】天气...")
        response = requests.get(base_url, params=params, timeout=10)
        response.raise_for_status()
        
        data = response.json()
        weather = data["weather"][0]["main"]  # 天气状况(如"Rain")
        temp = round(data["main"]["temp"], 1)  # 温度(保留1位小数)
        
        logging.info(f"【{{C}{C}{C}city}】天气查询成功:{{C}{C}{C}weather},{{C}{C}{C}temp}℃")
        return weather, temp

    except requests.exceptions.RequestException as e:
        logging.error(f"【{{C}{C}{C}city}】天气查询失败(网络问题):{{C}{C}{C}str(e)}")
        return None, None
    except KeyError as e:
        logging.error(f"【{{C}{C}{C}city}】天气查询失败(数据格式错误):缺少字段{{C}{C}{C}e}")
        return None, None
    except Exception as e:
        logging.error(f"【{{C}{C}{C}city}】天气查询失败(未知错误):{{C}{C}{C}str(e)}")
        return None, None

def send_rain_alert(recipient_email, weather, temp, city):
    """发送下雨提醒邮件"""
    # 构建邮件
    msg = MIMEMultipart()
    msg["From"] = SENDER_EMAIL
    msg["To"] = recipient_email
    msg["Subject"] = f"🌧️ 【{{C}{C}{C}city}】降雨提醒:今日有{{C}{C}{C}weather},记得带伞!"

    # 邮件正文
    email_body = f"""
    👋 您好!

    天气预警小助手为您播报【{city}】今日天气:
    • 天气状况:{weather}
    • 实时温度:{temp}℃

    ⚠️  温馨提示:
    由于检测到降雨,建议您出门时携带雨伞或雨衣,注意路面湿滑,安全出行~

    🌟 祝您今日一切顺利!
    —— 天气预警小助手
    """
    msg.attach(MIMEText(email_body, "plain", "utf-8"))

    try:
        logging.info(f"准备向【{{C}{C}{C}recipient_email}】发送降雨提醒...")
        with smtplib.SMTP("smtp.qq.com", 587) as server:
            server.starttls()
            server.login(SENDER_EMAIL, SENDER_AUTH_CODE)
            server.send_message(msg)
        
        logging.info("降雨提醒邮件发送成功!")
        return True

    except smtplib.SMTPAuthenticationError:
        logging.error("邮件发送失败:请检查QQ邮箱和SMTP授权码是否正确!")
        return False
    except Exception as e:
        logging.error(f"邮件发送失败(未知错误):{{C}{C}{C}str(e)}")
        return False

def main():
    """主函数:串联整个流程"""
    logging.info("=" * 50)
    logging.info("天气预警小助手启动!")
    logging.info("=" * 50)

    # 1. 获取天气数据
    weather, temp = get_weather(TARGET_CITY, OPENWEATHER_API_KEY)
    if not weather or not temp:
        logging.error("流程终止:无法获取有效天气数据")
        return

    # 2. 判断是否需要发送提醒(包含"Rain"或"Drizzle"表示下雨/小雨)
    rainy_conditions = ["Rain", "Drizzle"]  # 下雨相关的天气状态
    if weather in rainy_conditions:
        logging.info(f"检测到【{{C}{C}{C}TARGET_CITY}】今日有雨({{C}{C}{C}weather}),触发提醒流程...")
        # 3. 发送提醒邮件
        send_success = send_rain_alert(RECIPIENT_EMAIL, weather, temp, TARGET_CITY)
        if not send_success:
            logging.error("流程终止:邮件发送失败")
    else:
        logging.info(f"【{{C}{C}{C}TARGET_CITY}】今日无雨({{C}{C}{C}weather}),无需发送提醒")

    logging.info("=" * 50)
    logging.info("天气预警小助手运行结束!")
    logging.info("=" * 50)

# 当脚本直接运行时,执行主函数
if __name__ == "__main__":
    main()

3.5 运行与测试(见证成果的时刻!)🧪

运行步骤

  1. 确保虚拟环境已激活(终端前有(venv)标识)。

  2. 安装依赖(如果还没安装):

    pip install requests
  3. 运行脚本:

    python weather_alert.py

成功场景输出

如果城市正在下雨,终端会输出:

2025-09-18 15:00:00 - INFO - ==================================================
2025-09-18 15:00:00 - INFO - 天气预警小助手启动!
2025-09-18 15:00:00 - INFO - ==================================================
2025-09-18 15:00:01 - INFO - 开始查询【上海】天气...
2025-09-18 15:00:02 - INFO - 【上海】天气查询成功:Rain,22.5℃
2025-09-18 15:00:02 - INFO - 检测到【上海】今日有雨(Rain),触发提醒流程...
2025-09-18 15:00:02 - INFO - 准备向【xxx@example.com】发送降雨提醒...
2025-09-18 15:00:05 - INFO - 降雨提醒邮件发送成功!
2025-09-18 15:00:05 - INFO - ==================================================
2025-09-18 15:00:05 - INFO - 天气预警小助手运行结束!
2025-09-18 15:00:05 - INFO - ==================================================

同时,收件人邮箱会收到一封带 emoji 的提醒邮件,效果如下:

主题:🌧️ 【上海】降雨提醒:今日有Rain,记得带伞!

正文

👋 您好!

天气预警小助手为您播报【上海】今日天气:

• 天气状况:Rain

• 实时温度:22.5℃

⚠️ 温馨提示:由于检测到降雨,建议您出门时携带雨伞或雨衣…

常见问题排查

  • API请求失败:检查API密钥是否生效(生成后等15分钟)、城市名是否正确(如“北京”而非“beijing”)。

  • 邮件发送失败:检查QQ邮箱授权码是否正确、发件人邮箱是否与授权码匹配、收件人邮箱是否填写正确。

  • 中文乱码:确保邮件正文用utf-8编码(代码中已配置,无需修改)。

💬 “这个脚本比闹钟还贴心!每天早上运行一次,再也不用担心出门忘带伞了。如果想让它自动运行,可以用Windows任务计划或Linux的crontab,让AI帮你写定时任务脚本~” 😂

AI辅助编程入门指南:从环境搭建到第一个智能脚本

第四章:AI编程避坑指南——别让AI“坑”了你 🛑

AI很强大,但不是“万能的神”。新手很容易陷入“盲目信任AI”的误区,写出有bug、不安全甚至无法运行的代码。这一章会带你避开AI编程中最常见的6个坑,让你的代码既高效又可靠。

4.1 坑1:盲目复制AI生成的代码(最常见!)❌

AI生成的代码“看起来很对”,但可能隐藏致命问题:

  • 使用废弃的库或API:比如推荐用requests的session.get()但参数错误,或用已停止维护的库(如pandas-profiling已改名为ydata-profiling)。

  • 忽略边界条件:比如写“计算平均分”的函数时,没考虑“列表为空”的情况,导致ZeroDivisionError。

  • 硬编码敏感信息:直接把API密钥、数据库密码写在代码里,上传到GitHub后泄露。

避坑方案:“三审原则”

  1. 一审语法:用编辑器的语法检查(VS Code会标红错误),确保没有拼写错误、缩进问题。

  2. 二审逻辑:逐行阅读代码,思考“这里是否有遗漏的情况?”比如:

    • 函数是否处理了None输入?

    • 循环是否会出现死循环?

    • API请求是否有超时设置?

  3. 三审安全

    • 敏感信息(密钥、密码)是否硬编码?用环境变量或配置文件替代(见4.3节)。

    • 是否有SQL注入风险?(如果用到数据库)

    • 是否调用了不可信的API?

实战示例:修复AI生成的“有坑代码”

AI生成的“计算平均分”函数(有坑):

# AI生成的代码(有bug)
def calculate_average(scores):
    total = sum(scores)
    average = total / len(scores)
    return average

问题:当scores为空列表(如calculate_average([]))时,会抛出ZeroDivisionError。

修复后(添加边界条件):

# 修复后的代码
def calculate_average(scores):
    if not scores:  # 处理空列表
        logging.warning("分数列表为空,无法计算平均分")
        return 0.0  # 或返回None,根据业务需求定
    total = sum(scores)
    average = total / len(scores)
    return round(average, 2)  # 保留2位小数,更符合实际需求

4.2 坑2:提示词(Prompt)太模糊,AI“猜不透你”🤔

新手常犯的错误是“用一句话丢给AI”,比如:

  • ❌ 模糊提示:“写一个爬虫”“做一个数据分析脚本”

  • ❌ 缺少上下文:“为什么这段代码报错?”(不贴代码)

  • ❌ 没有格式要求:“生成测试用例”(没说用pytest还是unittest)

结果就是AI生成的代码“驴唇不对马嘴”,需要反复修改,反而浪费时间。

避坑方案:“5W1H”提示词公式

向AI提问时,包含以下6个要素,输出准确率提升80%:

  • What:要实现什么功能?(如“爬取豆瓣电影Top250的电影名、评分”)

  • Why:用途是什么?(如“用于数据分析,需要保存为CSV文件”)

  • Who:给谁用?(如“供新手运行,代码需要详细注释”)

  • Which:用什么技术栈?(如“用Python的requests和BeautifulSoup,不要用Scrapy”)

  • How:有什么特殊要求?(如“处理分页,每爬1页休眠1秒,避免被封禁”)

  • Where:输出到哪里?(如“保存到当前目录的douban_top250.csv”)

对比示例:模糊提示 vs 精准提示

类型 提示词 AI输出效果
❌ 模糊 “写一个Python爬虫爬豆瓣电影” 生成的代码可能用Scrapy(新手难上手),不处理分页,不保存数据,无注释。
✅ 精准 “用Python写一个爬取豆瓣电影Top250的爬虫:1. 使用requests和BeautifulSoup;2. 爬取每部电影的名称、评分、导演、上映年份;3. 处理10页分页(每页25部);4. 每爬1页休眠1秒(避免被反爬);5. 数据保存为CSV文件(编码utf-8);6. 添加详细中文注释,适合Python新手运行;7. 处理网络超时和403错误。” 生成的代码符合所有要求,新手能直接运行,几乎无需修改。

4.3 坑3:敏感信息硬编码(安全大忌!)🔒

AI生成代码时,为了“演示方便”,会直接把API密钥、邮箱密码等硬编码在代码里,比如:

# AI生成的代码(不安全)
API_KEY = "abc123xyz789"  # 硬编码的API密钥
SMTP_PASSWORD = "123456"  # 硬编码的密码

如果把这样的代码上传到GitHub,任何人都能看到你的密钥,可能导致:

  • API被恶意调用,耗尽免费额度。

  • 邮箱被他人登录,发送垃圾邮件。

  • 数据库被攻击,数据泄露。

避坑方案:用环境变量存储敏感信息

环境变量是系统级别的“变量”,代码从系统中读取,不在代码里明文显示。

实战步骤(以Windows为例)

  1. 设置环境变量

    • 变量名:OPENWEATHER_API_KEY,变量值:你的API密钥。

    • 变量名:QQ_SMTP_AUTH_CODE,变量值:你的QQ邮箱授权码。

    • 按下Win + R,输入sysdm.cpl → 点击“高级” → “环境变量”。

    • 在“用户变量”中点击“新建”,添加以下变量:

    • 点击“确定”保存,关闭所有终端(环境变量需重启终端生效)。

  2. 代码中读取环境变量

    使用Python的os库读取环境变量,替代硬编码:

    import os
    import logging
    
    # 从环境变量读取敏感信息(安全!)
    OPENWEATHER_API_KEY = os.getenv("OPENWEATHER_API_KEY")
    QQ_SMTP_AUTH_CODE = os.getenv("QQ_SMTP_AUTH_CODE")
    
    # 检查环境变量是否配置
    if not OPENWEATHER_API_KEY:
        logging.error("请先配置环境变量 OPENWEATHER_API_KEY!")
        exit(1)  # 退出程序
    if not QQ_SMTP_AUTH_CODE:
        logging.error("请先配置环境变量 QQ_SMTP_AUTH_CODE!")
        exit(1)

macOS/Linux设置环境变量

  • 临时生效(当前终端):

    export OPENWEATHER_API_KEY="你的API密钥"
    export QQ_SMTP_AUTH_CODE="你的授权码"
  • 永久生效(所有终端):

    编辑~/.bashrc(或~/.zshrc),添加上述两行,保存后执行:

    source ~/.bashrc  # 生效配置

4.4 坑4:不验证AI生成的依赖版本📦

AI生成代码时,通常不会指定库的版本(如pip install requests而非pip install requests==2.32.2),可能导致:

  • 安装的库版本过新,与代码不兼容(比如新版本移除了旧函数)。

  • 安装的库版本过旧,存在安全漏洞。

避坑方案:“固定依赖版本+定期更新”

  1. 固定版本:在requirements.txt中指定具体版本,比如:

    # requirements.txt(指定版本)
    requests==2.32.2  # 稳定版本,与代码兼容
    pandas==2.2.2
    numpy==1.26.4

    安装时用:pip install -r requirements.txt

  2. 如何选择版本

    • 优先选“最新的稳定版”(非beta版)。

    • 参考库的官方文档,确认与Python版本兼容(如pandas 2.0+需要Python 3.8+)。

    • 用pip list --outdated查看哪些库有更新,定期更新(但要先测试兼容性)。

  3. 安全扫描:用safety工具扫描依赖中的安全漏洞:

    pip install safety
    safety check  # 扫描当前环境的依赖漏洞

4.5 坑5:依赖“黑箱代码”,不理解原理📚

很多新手用AI写代码时,“复制粘贴就能跑”就满足了,从不问“这段代码为什么这么写?”。比如:

  • 用AI生成了requests的session请求代码,却不知道session和普通get的区别。

  • 用AI生成了pandas的数据处理代码,却不知道df.groupby()的逻辑。

长期下来,会变成“只会调AI的工具人”,遇到AI解决不了的问题(如复杂业务逻辑、性能优化)就束手无策。

避坑方案:“先懂后用”三步骤

  1. 问AI“为什么”:生成代码后,追加提问:

    • “解释一下这段代码中session的作用?”

    • “df.dropna(subset=['age'])为什么要加subset参数?”

    • “这段代码的时间复杂度是多少?有没有优化空间?”

  2. 查官方文档:AI的解释可能不全面,关键知识点一定要查官方文档:

  3. 手动改写代码:把AI生成的代码用“另一种方式实现”,比如:

    • AI用for循环处理列表,你尝试用列表推导式重写。

    • AI用pandas的apply函数,你尝试用map或vectorize优化。

4.6 坑6:忽视AI的“能力边界”🚫

AI不是万能的,它有明确的能力边界,超出边界的需求会生成“无效代码”:

  • 处理实时数据或本地文件:AI无法访问你的本地硬盘(如“读取我电脑上的data.csv文件”),会生成“假设文件存在”的代码,但实际运行时会报FileNotFoundError。

  • 调用未公开的API:AI不知道你公司内部系统的API地址和参数,会生成“通用格式”的代码,无法直接使用。

  • 解决超复杂的算法问题:比如“实现一个分布式一致性协议”“优化深度学习模型的显存占用”,AI生成的代码可能只有框架,缺少核心逻辑。

避坑方案:“拆分需求+补充信息”

  1. 拆分需求:把“AI搞不定”的部分拆出来,手动处理。比如:

    • 需求“读取本地data.csv并分析” → 拆分为“AI生成数据分析代码” + “手动确认文件路径和格式”。

  2. 补充信息:如果是公司内部API,向AI提供“API文档片段”(如请求地址、参数格式、返回示例),再让AI生成代码。

  3. 降低难度:把复杂问题拆成多个简单问题。比如“优化深度学习模型” → 先让AI“生成模型剪枝的基础代码”,再让AI“优化剪枝后的精度损失”。

4.7 避坑总结:AI是“助手”,不是“老板”👔

记住一句话:“AI负责生成代码,你负责对代码负责”。优秀的AI编程者会:

  • 用AI提高效率,但不放弃思考。

  • 依赖AI解决重复劳动,但坚持学习底层原理。

  • 把AI当“结对编程伙伴”,而不是“甩手掌柜”。

AI辅助编程入门指南:从环境搭建到第一个智能脚本

第五章:进阶技巧——让AI成为你的“超级外挂”💥

掌握了基础后,这一章会带你解锁5个“AI编程进阶技巧”,让你的效率再上一个台阶。这些技巧能帮你解决“复杂项目开发”“代码优化”“团队协作”等场景的问题,从“会用AI”变成“善用AI”。

5.1 技巧1:用AI生成单元测试(代码质量翻倍)🧪

单元测试是“验证函数/类是否正确工作”的代码,能提前发现bug,尤其适合大型项目。但手动写测试用例很枯燥,AI能帮你自动生成,准确率高达90%。

实战步骤(以pytest为例)

  1. 安装pytest

    pip install pytest
  2. 让AI生成测试用例

    假设你有一个utils.py文件,包含一个“计算BMI指数”的函数:

    # utils.py
    def calculate_bmi(weight, height):
        """
        计算BMI指数(体重kg / 身高m的平方)
        :param weight: 体重(kg,必须>0)
        :param height: 身高(m,必须>0)
        :return: BMI值(保留1位小数)
        :raise: ValueError - 体重或身高为非正数时
        """
        if weight <= 0 or height <= 0:
            raise ValueError("体重和身高必须为正数")
        bmi = weight / (height ** 2)
        return round(bmi, 1)

    向ChatGPT输入提示词:

    “为以下Python函数写单元测试,使用pytest框架:1. 测试正常情况(如体重60kg,身高1.7m,BMI约20.8);2. 测试边界值(体重1kg,身高0.5m;体重100kg,身高2.0m);3. 测试异常情况(体重为0、负数,身高为0、负数),确保抛出ValueError;4. 测试用例文件名为test_utils.py,每个测试用例加中文注释。”

  3. AI生成的测试代码(test_utils.py):

    # test_utils.py
    import pytest
    from utils import calculate_bmi  # 导入要测试的函数
    
    def test_bmi_normal_case():
        """测试正常情况:BMI在健康范围内"""
        # 体重60kg,身高1.7m → 60/(1.7²) ≈ 20.8
        assert calculate_bmi(60, 1.7) == 20.8
        # 体重70kg,身高1.8m → 70/(1.8²) ≈ 21.6
        assert calculate_bmi(70, 1.8) == 21.6
    
    def test_bmi_edge_case():
        """测试边界值:体重/身高极小或极大"""
        # 体重1kg,身高0.5m → 1/(0.5²) = 4.0
        assert calculate_bmi(1, 0.5) == 4.0
        # 体重100kg,身高2.0m → 100/(2.0²) = 25.0
        assert calculate_bmi(100, 2.0) == 25.0
    
    def test_bmi_invalid_weight():
        """测试异常情况:体重为0或负数"""
        # 体重为0 → 抛出ValueError
        with pytest.raises(ValueError, match="体重和身高必须为正数"):
            calculate_bmi(0, 1.7)
        # 体重为负数 → 抛出ValueError
        with pytest.raises(ValueError, match="体重和身高必须为正数"):
            calculate_bmi(-60, 1.7)
    
    def test_bmi_invalid_height():
        """测试异常情况:身高为0或负数"""
        # 身高为0 → 抛出ValueError
        with pytest.raises(ValueError, match="体重和身高必须为正数"):
            calculate_bmi(60, 0)
        # 身高为负数 → 抛出ValueError
        with pytest.raises(ValueError, match="体重和身高必须为正数"):
            calculate_bmi(60, -1.7)
  4. 运行测试

    在终端中执行:

    pytest test_utils.py -v  # -v表示显示详细结果

    输出如下(全部通过):

    collected 4 items
    
    test_utils.py::test_bmi_normal_case PASSED
    test_utils.py::test_bmi_edge_case PASSED
    test_utils.py::test_bmi_invalid_weight PASSED
    test_utils.py::test_bmi_invalid_height PASSED

💡 优势:用AI生成单元测试,不仅节省时间,还能覆盖你没想到的边界情况(如体重为0),大幅提升代码可靠性。

5.2 技巧2:用AI重构“祖传代码”(老项目救星)🛠️

每个开发者都遇到过“祖传代码”——没有注释、逻辑混乱、重复代码多的旧脚本。手动重构耗时耗力,AI能帮你快速优化,让代码变得“优雅又高效”。

重构目标(AI能帮你实现)

  • 拆分过大的函数(如一个函数写500行 → 拆成多个小函数)。

  • 移除重复代码(用函数或类封装重复逻辑)。

  • 添加类型注解(提升可读性和IDE提示)。

  • 优化性能(如用列表推导式替代低效的for循环)。

  • 添加中文注释和文档字符串。

实战示例:重构“混乱的用户数据处理代码”

原始代码(祖传代码,无注释、逻辑混乱):

# 祖传代码(bad_code.py)
def process_users(users):
    result = []
    for u in users:
        if u.get('age') and u['age'] >= 18:
            if u.get('city') == 'Beijing':
                score = u.get('score', 0) * 1.2
            else:
                score = u.get('score', 0) * 1.1
            result.append({
                'name': u.get('name', 'Unknown'),
                'age': u['age'],
                'city': u.get('city', 'Unknown'),
                'adjusted_score': round(score, 2)
            })
    return result

向AI输入提示词

“重构以下Python代码,要求:1. 拆分过大的函数(process_users太复杂);2. 添加详细中文注释和函数文档字符串;3. 添加类型注解(使用typing模块);4. 优化条件判断逻辑,减少嵌套;5. 处理可能的KeyError(比如用户字典缺少’age’字段);6. 用更Pythonic的方式实现(如列表推导式或生成器)。”

AI重构后的代码(优雅、易读、可靠):

# 重构后的代码(good_code.py)
from typing import List, Dict, Optional, Union

def calculate_adjusted_score(city: Optional[str], base_score: float) -> float:
    """
    根据用户所在城市计算调整后的分数
    :param city: 用户所在城市(可能为None)
    :param base_score: 用户基础分数
    :return: 调整后的分数(保留2位小数)
    """
    # 北京用户加分20%,其他城市加分10%,默认不加分
    if city == "Beijing":
        return round(base_score * 1.2, 2)
    elif city:  # 城市存在但非北京
        return round(base_score * 1.1, 2)
    else:  # 城市为None
        return round(base_score, 2)

def validate_user(user: Dict[str, Union[str, int, float]]) -> bool:
    """
    验证用户是否符合处理条件(成年且年龄字段存在)
    :param user: 用户字典
    :return: True(符合条件)/ False(不符合)
    """
    # 确保age字段存在且为大于等于18的整数/浮点数
    age = user.get("age")
    return isinstance(age, (int, float)) and age >= 18

def process_users(users: List[Dict[str, Union[str, int, float]]]) -> List[Dict[str, Union[str, int, float]]]:
    """
    处理用户列表:筛选成年用户,计算调整后分数,返回结构化结果
    :param users: 原始用户列表(每个用户为字典,包含name/age/city/score等字段)
    :return: 处理后的用户列表(包含name/age/city/adjusted_score)
    """
    # 用列表推导式替代for循环,更Pythonic
    return [
        {
            "name": user.get("name", "Unknown"),  # 姓名默认值"Unknown"
            "age": user["age"],  # 已通过validate_user验证,age必存在
            "city": user.get("city", "Unknown"),  # 城市默认值"Unknown"
            "adjusted_score": calculate_adjusted_score(
                city=user.get("city"),
                base_score=float(user.get("score", 0))  # 分数默认0,转为float
            )
        }
        for user in users
        if validate_user(user)  # 只处理符合条件的用户
    ]

# 测试
if __name__ == "__main__":
    test_users = [
        {"name": "Alice", "age": 25, "city": "Beijing", "score": 80},
        {"name": "Bob", "age": 17, "city": "Shanghai", "score": 90},  # 未成年,被过滤
        {"name": "Charlie", "age": 30, "score": 85},  # 无city字段
        {"name": "Dave", "city": "Guangzhou", "score": 75},  # 无age字段,被过滤
    ]
    processed = process_users(test_users)
    print(processed)

重构前后对比

维度 原始代码 重构后代码
可读性 无注释,逻辑嵌套深,难理解 有详细注释和文档字符串,函数拆分清晰
可维护性 一个函数50行,修改容易出bug 拆分为3个小函数,各司其职,修改方便
可靠性 可能抛出KeyError(如user无’age’) 有验证函数,处理默认值,无异常
扩展性 添加新规则(如上海用户加分)需改核心逻辑 只需修改calculate_adjusted_score,符合开闭原则

💬 “AI重构代码的能力堪比‘代码美容师’!以前要花1小时重构的祖传代码,现在AI5分钟就能搞定,还比我写得更规范。” 🚀

5.3 技巧3:用AI生成项目文档(告别“文档恐惧症”)📄

文档是团队协作的“桥梁”,但开发者往往“宁愿写代码,不愿写文档”。AI能帮你自动生成各类文档,包括:

  • README.md:项目介绍、安装步骤、使用示例。

  • 函数/类的文档字符串(如docstring)。

  • API接口文档(如Swagger格式)。

  • 数据库表结构说明。

实战示例:生成项目README.md

假设你开发了“天气预警小助手”项目,向ChatGPT输入提示词:

“为我的Python项目‘天气预警小助手’生成README.md,要求:1. 包含项目简介、功能特点、安装步骤、使用方法、配置说明、常见问题;2. 使用Markdown格式,添加适当的emoji和代码块;3. 语言为中文,适合新手阅读;4. 安装步骤包含虚拟环境创建和依赖安装;5. 配置说明详细说明环境变量的设置方法。”

AI生成的README.md(节选)

# 天气预警小助手 🌤️→🌧️

一个基于Python和AI辅助开发的天气预警工具,能自动查询指定城市天气,若检测到降雨,通过QQ邮箱发送带伞提醒。

## ✨ 功能特点
- 🌍 支持全球城市天气查询(基于OpenWeatherMap API)
- 🌧️ 智能识别降雨天气(小雨、中雨等),自动触发提醒
- 📧 用QQ邮箱发送美观的提醒邮件(含天气和温度信息)
- 🛡️ 完善的异常处理(网络错误、API失败、邮件发送失败)
- 📝 详细日志输出,方便排查问题
- 🔒 安全的配置方式(用环境变量存储敏感信息,避免泄露)

## 🚀 安装步骤

### 1. 克隆项目(或下载代码)
```bash
git clone https://github.com/your-name/weather-alert.git
cd weather-alert

2. 创建并激活虚拟环境

# Windows(PowerShell)
python -m venv venv
.\venv\Scripts\Activate.ps1

# macOS/Linux(Terminal)
python3 -m venv venv
source venv/bin/activate

3. 安装依赖

pip install -r requirements.txt

⚙️ 配置说明

项目需要配置4个环境变量(敏感信息,不硬编码):

环境变量名 说明 示例
OPENWEATHER_API_KEY OpenWeatherMap的API密钥(免费注册) abc123xyz789
TARGET_CITY 要查询的城市(中文) 上海
RECIPIENT_EMAIL 接收提醒的邮箱 user@example.com
QQ_SMTP_AUTH_CODE QQ邮箱的SMTP授权码 abcdefghijklmnop

配置方法(以Windows为例)

  1. 按下Win + R,输入sysdm.cpl → 点击“高级” → “环境变量”。

  2. 在“用户变量”中点击“新建”,逐个添加上述环境变量。

  3. 关闭所有终端,重新打开(环境变量生效)。

📖 使用方法

1. 运行脚本

python weather_alert.py

2. 查看输出

如果城市正在下雨,终端会显示:

2025-09-18 16:00:00 - INFO - 天气预警小助手启动!
2025-09-18 16:00:01 - INFO - 【上海】天气查询成功:Rain,22.5℃
2025-09-18 16:00:02 - INFO - 降雨提醒邮件发送成功!

3. 自动运行(进阶)

  • Windows:用“任务计划程序”设置每天早上7点运行脚本。

  • macOS/Linux:用crontab设置定时任务,例如:

    # 每天7:00运行
    0 7 * * * /path/to/venv/bin/python /path/to/weather_alert.py

❓ 常见问题

Q1: API请求失败,提示“401 Unauthorized”?

A: 检查OPENWEATHER_API_KEY是否正确,或是否已生效(新注册的密钥需等15分钟)。

Q2: 邮件发送失败,提示“SMTPAuthenticationError”?

A: 确认QQ邮箱SMTP授权码正确,且发件人邮箱与授权码匹配。

AI辅助编程入门指南:从环境搭建到第一个智能脚本

打赏
THE END
作者头像
dotaai
正在和我的聊天机器人谈恋爱,它很会捧场。