AI编程(十二):实战 — 从零做一个价格记录工具

作者:

12篇所学全部用上,做出一个真正能用的程序

一、恭喜你走到了最后

这是这个系列的第12篇,也是最后一篇。

回头看这11篇,你已经学了不少东西:

篇目 你学会了什么

|—|—|

第一篇 理解了为什么现在学编程比以前容易——有AI帮忙
第二篇 搭好了编程环境,装好了Python和编辑器
第三篇 写出了第一个程序,理解了”运行”是什么意思
第四篇 认识了变量和数据类型——数字、文字、真假
第五篇 学会了条件判断——让程序能做选择
第六篇 学会了循环——让程序能重复做事
第七篇 学会了函数——把代码打包,方便复用
第八篇 学会了列表和字典——管理一组数据
第九篇 学会了文件操作——数据能存下来、读回来
第十篇 学会了错误处理——程序不再一碰就碎
第十一篇 学会了让AI帮你选技术栈——遇到问题知道找什么工具

这些知识点,单独看都不复杂。但今天,我们要把它们全部串起来,做一个真正能用的程序。

二、我们要做什么?

做一个价格记录工具

去超市买东西,想知道上次这个商品卖多少钱?用它记下来。想比较不同时间的价格变化?用它查一查。

功能很简单,但五脏俱全:

  • ➕ 添加商品和价格
  • 📋 查看所有记录
  • 🔍 查找某个商品
  • 🗑️ 删除记录
  • 💾 保存到文件
  • 📂 从文件加载

三、第一步:跟AI聊需求

你的提示词:

我想用Python做一个价格记录工具。功能包括:添加商品价格、查看所有记录、搜索商品、删除记录、保存到文件、从文件加载。用命令行交互,中文界面。帮我写出完整的代码,加上详细的中文注释。

AI给你的方案:

它会给你一个完整的程序,包含一个字典来存储数据,几个函数来实现功能,一个主循环来处理用户输入,以及文件读写来保存数据。

拿到代码后,不要急着运行。先看一遍,大致理解每部分在做什么。看不懂的地方,继续问AI。

四、第二步:理解整体结构

整个程序的结构就像一家小店:

价格记录工具
├── 数据存储:一个字典,商品名做键,价格信息做值
├── 功能模块:6个函数,每个负责一件事
├── 主循环:显示菜单,接收选择,调用对应函数
└── 文件操作:保存和加载数据

这个结构在编程里非常常见,叫”菜单驱动程序”——用户看到一个菜单,选一个数字,程序执行对应操作。

五、第三步:逐步实现

5.1 数据结构

# 用字典存储所有商品
# 结构:{商品名: {"价格": 数字, "日期": "日期字符串"}}
商品数据 = {}

为什么用字典?因为我们需要通过商品名快速查找。字典就像通讯录——给一个名字,马上能找到对应信息。(第八篇学的)

5.2 添加功能

def 添加商品():
    """添加一条商品价格记录"""
    名称 = input("商品名称:").strip()  # strip()去掉首尾空格
    if not 名称:                        # 空输入就不处理
        print("❌ 商品名称不能为空")
        return

    价格输入 = input("价格(元):")      # 第十篇:处理错误输入
    try:
        价格 = float(价格输入)           # 把文字转成小数
    except ValueError:
        print("❌ 请输入有效的数字")
        return

    日期 = input("日期(如2025-01-15,直接回车用今天):").strip()
    if not 日期:
        from datetime import datetime
        日期 = datetime.now().strftime("%Y-%m-%d")  # 自动用今天的日期

    商品数据[名称] = {"价格": 价格, "日期": 日期}
    print(f"✅ 已记录:{名称},{价格}元,{日期}")

这段代码用到了:变量(第四篇)、条件判断(第五篇)、字典操作(第八篇)、错误处理(第十篇)。

5.3 查看所有记录

def 查看全部():
    """显示所有商品价格记录"""
    if not 商品数据:                     # 字典为空
        print("📭 还没有任何记录")
        return

    print(f"n{'商品':8}{'日期':>14}")
    print("-" * 36)
    for 名称, 信息 in 商品数据.items():   # 第六篇:循环,第八篇:字典遍历
        print(f"{名称:8.2f}元{信息['日期']:>12}")
    print(f"n共 {len(商品数据)} 条记录")

{名称:<12} 是格式化输出——让文字左对齐,占12个字符宽。这样表格看起来整整齐齐。

5.4 搜索功能

def 搜索商品():
    """按名称搜索商品"""
    关键字 = input("输入商品名称(支持部分匹配):").strip()
    if not 关键字:
        return

    找到的 = []
    for 名称, 信息 in 商品数据.items():
        if 关键字 in 名称:               # "牛奶"能匹配"蒙牛纯牛奶"
            找到的.append((名称, 信息))

    if 找到的:
        print(f"n找到 {len(找到的)} 条记录:")
        for 名称, 信息 in 找到的:
            print(f"  {名称}:{信息['价格']}元,{信息['日期']}")
    else:
        print(f"🔍 没有找到包含"{关键字}"的商品")

支持部分匹配——输入”牛奶”,能找到”蒙牛纯牛奶””伊利鲜牛奶”等所有带”牛奶”的商品。这比精确匹配实用多了。

5.5 删除功能

def 删除商品():
    """删除一条记录"""
    名称 = input("要删除的商品名称:").strip()
    if 名称 in 商品数据:
        确认 = input(f"确认删除"{名称}"?(y/n):")  # 防止误删
        if 确认.lower() == 'y':
            del 商品数据[名称]
            print(f"🗑️ 已删除:{名称}")
    else:
        print(f"❌ 找不到"{名称}"")

删除前让用户确认——这是”用户体验”的基本功。

5.6 保存和加载

import json

文件名 = "价格记录.json"

def 保存数据():
    """把数据保存到JSON文件"""
    with open(文件名, "w", encoding="utf-8") as f:
        json.dump(商品数据, f, ensure_ascii=False, indent=2)
    print(f"💾 已保存 {len(商品数据)} 条记录到 {文件名}")

def 加载数据():
    """从JSON文件加载数据"""
    global 商品数据                    # 告诉Python我们要修改全局变量
    try:
        with open(文件名, "r", encoding="utf-8") as f:
            商品数据 = json.load(f)
        print(f"📂 已从 {文件名} 加载 {len(商品数据)} 条记录")
    except FileNotFoundError:
        print("📭 没有找到保存的文件,从空数据开始")
    except json.JSONDecodeError:
        print("⚠️ 文件格式损坏,从空数据开始")

这里把第九篇的文件操作和第十篇的错误处理结合在了一起。global 关键字告诉函数:”我要修改外面那个 商品数据,不是创建一个新的。”

5.7 主循环

def 主菜单():
    """程序的主循环"""
    加载数据()                         # 启动时自动加载之前的数据

    while True:                        # 第六篇:无限循环
        print("n" + "=" * 30)
        print("  📊 价格记录工具")
        print("=" * 30)
        print("  1. 添加商品价格")
        print("  2. 查看所有记录")
        print("  3. 搜索商品")
        print("  4. 删除记录")
        print("  5. 保存数据")
        print("  0. 退出")
        print("=" * 30)

        选择 = input("请选择功能(0-5):").strip()

        if 选择 == "1":
            添加商品()
        elif 选择 == "2":
            查看全部()
        elif 选择 == "3":
            搜索商品()
        elif 选择 == "4":
            删除商品()
        elif 选择 == "5":
            保存数据()
        elif 选择 == "0":
            保存数据()                 # 退出前自动保存
            print("👋 再见!数据已保存。")
            break                      # 跳出循环,程序结束
        else:
            print("❌ 无效选择,请输入0-5")

# 启动程序
主菜单()

六、完整代码

把上面所有部分合在一起,加上必要的import和注释:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
价格记录工具 v1.0
功能:添加、查看、搜索、删除商品价格记录
数据保存在 价格记录.json 文件中
"""

import json
from datetime import datetime

# ========== 全局变量 ==========
商品数据 = {}        # 所有商品数据存在这个字典里
文件名 = "价格记录.json"  # 数据保存的文件名


# ========== 核心功能函数 ==========

def 添加商品():
    """添加一条商品价格记录"""
    名称 = input("商品名称:").strip()
    if not 名称:
        print("❌ 商品名称不能为空")
        return

    价格输入 = input("价格(元):")
    try:
        价格 = float(价格输入)
        if 价格 < 0:
            print("❌ 价格不能为负数")
            return
    except ValueError:
        print("❌ 请输入有效的数字")
        return

    日期 = input("日期(如2025-01-15,直接回车用今天):").strip()
    if not 日期:
        日期 = datetime.now().strftime("%Y-%m-%d")

    商品数据[名称] = {"价格": 价格, "日期": 日期}
    print(f"✅ 已记录:{名称},{价格}元,{日期}")


def 查看全部():
    """显示所有商品价格记录"""
    if not 商品数据:
        print("📭 还没有任何记录")
        return

    print(f"n{'商品':8}{'日期':>14}")
    print("-" * 36)
    for 名称, 信息 in 商品数据.items():
        print(f"{名称:8.2f}元{信息['日期']:>12}")
    print(f"n共 {len(商品数据)} 条记录")


def 搜索商品():
    """按名称搜索商品(支持部分匹配)"""
    关键字 = input("输入商品名称(支持部分匹配):").strip()
    if not 关键字:
        return

    找到的 = [(名, 信) for 名, 信 in 商品数据.items() if 关键字 in 名]

    if 找到的:
        print(f"n找到 {len(找到的)} 条记录:")
        for 名称, 信息 in 找到的:
            print(f"  {名称}:{信息['价格']}元,{信息['日期']}")
    else:
        print(f"🔍 没有找到包含"{关键字}"的商品")


def 删除商品():
    """删除一条记录(需确认)"""
    名称 = input("要删除的商品名称:").strip()
    if 名称 in 商品数据:
        确认 = input(f"确认删除"{名称}"?(y/n):")
        if 确认.lower() == 'y':
            del 商品数据[名称]
            print(f"🗑️ 已删除:{名称}")
        else:
            print("取消删除")
    else:
        print(f"❌ 找不到"{名称}"")


# ========== 文件操作 ==========

def 保存数据():
    """把数据保存到JSON文件"""
    with open(文件名, "w", encoding="utf-8") as f:
        json.dump(商品数据, f, ensure_ascii=False, indent=2)
    print(f"💾 已保存 {len(商品数据)} 条记录到 {文件名}")


def 加载数据():
    """从JSON文件加载数据"""
    global 商品数据
    try:
        with open(文件名, "r", encoding="utf-8") as f:
            商品数据 = json.load(f)
        print(f"📂 已从 {文件名} 加载 {len(商品数据)} 条记录")
    except FileNotFoundError:
        print("📭 没有找到保存的文件,从空数据开始")
    except json.JSONDecodeError:
        print("⚠️ 文件格式损坏,从空数据开始")


# ========== 主程序 ==========

def 主菜单():
    """程序的主循环"""
    加载数据()

    while True:
        print("n" + "=" * 30)
        print("  📊 价格记录工具")
        print("=" * 30)
        print("  1. 添加商品价格")
        print("  2. 查看所有记录")
        print("  3. 搜索商品")
        print("  4. 删除记录")
        print("  5. 保存数据")
        print("  0. 退出")
        print("=" * 30)

        选择 = input("请选择功能(0-5):").strip()

        if 选择 == "1":
            添加商品()
        elif 选择 == "2":
            查看全部()
        elif 选择 == "3":
            搜索商品()
        elif 选择 == "4":
            删除商品()
        elif 选择 == "5":
            保存数据()
        elif 选择 == "0":
            保存数据()
            print("👋 再见!数据已保存。")
            break
        else:
            print("❌ 无效选择,请输入0-5")


# 启动程序
if __name__ == "__main__":
    主菜单()

复制这段代码,保存为 价格记录工具.py,在终端运行 python 价格记录工具.py,就能用了。

七、这个程序用到了哪些知识?

回头看看,这个不到100行的程序,用到了这个系列几乎所有的知识点:

知识点 用在哪里

|—|—|

变量和数据类型 商品数据、价格、日期
条件判断 菜单选择、输入验证
循环 主循环、遍历商品
函数 每个功能封装成一个函数
列表和字典 字典存储商品,列表存储搜索结果
文件操作 JSON保存和加载
错误处理 try-except处理无效输入和文件问题

这就是编程的本质:把简单的知识组合起来,解决实际问题。

八、跟AI协作的正确姿势

做这个项目的过程中,有几个跟AI协作的经验值得记住:

1. 先描述需求,再看代码。 不要上来就说”帮我写代码”,先告诉AI你想做什么、有哪些功能、用什么语言。需求描述越清楚,AI给的代码越靠谱。

2. 拿到代码后一定要读。 AI写的代码不一定完美,可能有bug,可能跟你想要的不一样。花5分钟读一遍,能省你半小时的调试时间。

3. 遇到报错不要慌。 把错误信息复制给AI,告诉它你做了什么操作、期望什么结果。AI通常能快速定位问题。

4. 逐步改进。 先让程序跑起来,再慢慢加功能。不要一开始就想要一个完美的程序。

九、接下来学什么?

这个系列结束了,但你的编程之路才刚开始。几个方向供你参考:

继续深化Python:

  • 学习面向对象编程(class),代码组织得更好
  • 学习pandas库,处理Excel和CSV数据
  • 学习requests库,调用网络API获取数据

做更有意思的项目:

  • 给这个价格工具加一个图形界面(tkinter)
  • 做一个自动抓取网页价格的脚本
  • 写一个小游戏(贪吃蛇、2048)

学习AI相关:

  • 学习调用大模型API,让AI帮你分析价格趋势
  • 学习用Python处理数据、画图表

关键原则:找一个你真正想解决的问题,然后用编程去解决它。 有了目标,学习才有动力。

十、写在最后

12篇文章,从”编程是什么”到”做出一个完整程序”,你走过的路比你想象的远。

很多人学编程,死在了”看懂了但写不出来”。而你不一样——你从第一篇开始就在写代码,一直在动手。哪怕是最简单的 print("你好"),那也是你亲手敲出来的。

编程不是天才的专利。它是一种技能,跟做饭、开车一样——练得多了,自然就会了。

唯一需要的,就是继续写下去。

找一个小问题,用代码解决它。遇到不会的,问AI。写出来了,再找下一个问题。

这就是编程的全部秘密。


*这是”AI编程”系列的最后一篇。感谢你一路读到这里。如果你用这个系列学到的东西做出了自己的程序,不管多简单,那都是值得骄傲的事。*

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注