大家好,今天我们将通过一个完整的菜单管理程序,来学习 Python 中四个非常重要的概念:列表(list)字典(dict)函数(function) 和文件操作(file I/O)。无论你是刚入门的小白,还是想巩固基础的同学,这篇文章都能帮你理清思路,写出更优雅、更健壮的代码。


一、程序功能预览

我们先来看最终要实现的程序:

  • 可以查看当前菜单(显示菜名和价格)

  • 可以添加新菜品

  • 可以删除菜品

  • 可以修改菜品名称或价格

  • 所有数据自动保存到文件中,下次启动时自动加载

运行界面如下:

这看起来像个简单的点餐系统后台,但它背后用到了 Python 的核心数据结构。让我们一步步拆解。


二、列表:存储多个菜品

在程序中,我们需要保存多道菜,每道菜都有名字和价格。Python 的列表正好用来存放一系列数据。

这里 DEFAULT_MENU 就是一个列表,用方括号 [] 括起来。列表可以包含任意类型的元素,这里每个元素都是一个字典(后面会讲)。

列表的特点:

  • 有序,每个元素有固定的位置(索引从 0 开始)

  • 可以随时添加、删除、修改元素

  • 通过 enumerate() 可以同时获得索引和元素

在我们的程序中,列表就是菜单的“容器”,所有操作(增删改查)都围绕这个列表进行。


三、字典:描述每一道菜

每道菜有两个属性:菜名 和 价格。这两个属性天然适合用字典来存储。

字典的特点:

  • 由键(key)和值(value)组成,用花括号 {} 表示

  • 键通常是字符串,值可以是任意类型

  • 通过键来访问值,比如 item["name"] 获得菜名,item["price"] 获得价格

程序中的每一个菜品都是一个字典,整个菜单就是这些字典组成的列表。这种“列表套字典”的结构非常常用,比如学生信息、商品库存等场景。


四、函数:让代码模块化

如果所有代码都堆在 while True 循环里,程序会变得难以阅读和维护。函数的作用就是把一段独立的功能封装起来,起一个有意义的名字,需要的时候调用它。

1. 显示菜单的函数

  • 参数 menu_list 是待显示的列表

  • 函数内部通过循环打印每个菜品

  • 用 if not menu_list 处理空列表的情况

2. 安全获取价格的函数

这个函数使用了 异常处理try...except)来防止用户输入非数字导致程序崩溃。只要用户不输入合法数字,就会一直提示,直到输入正确为止。

3. 保存和加载文件的函数

这两个函数负责与文件交互,后面在文件操作部分会详细讲解。

使用函数的好处:

  • 复用:显示菜单的地方只需调用 display_menu(menu),不用重复写打印代码

  • 清晰:主流程(main 函数)变得简洁,一眼就能看出程序在做什么

  • 易维护:如果将来想改变显示格式,只需修改 display_menu 函数,不用到处找代码


五、文件操作:让数据持久化

如果程序关闭后数据就丢失,那它只是一个“一次性”工具。为了让数据长期保存,我们需要把菜单写入文件,下次启动时再读出来。

1. 选择文件格式

我们使用 JSON 格式,因为 Python 内置了 json 模块,可以很方便地将列表/字典转换为字符串,并写入文件。JSON 也是人类可读的,方便调试。

文件路径用变量定义:

2保存数据到文件

  • with open(...) as f: 自动管理文件打开和关闭

  • 'w' 表示写入模式,如果文件不存在会创建,存在则覆盖

  • json.dump() 把 Python 对象写入文件

  • ensure_ascii=False 保证中文正常显示

  • indent=2 让 JSON 格式化,好看

  • try...except 捕获可能的文件错误,避免程序崩溃

3. 从文件加载数据

  • 先判断文件是否存在,不存在则返回默认菜单

  • json.load(f) 读取 JSON 文件并转换为 Python 对象

  • 对读取的数据进行简单校验(确保是列表,且每个元素都是包含 name 和 price 的字典)

  • 任何异常都返回默认菜单,保证程序能继续运行

4. 在增删改后自动保存

每当用户添加、删除或修改菜单后,我们都调用 save_menu(menu),把最新的列表写入文件。如果保存失败,会提示用户并保留内存中的数据(此时文件未更新,但用户可继续操作,下次保存会覆盖)。这样既保证了数据安全,又避免了因文件错误导致程序中断。


六、主流程:将所有部分串联起来

main 函数是程序的入口,它负责:

  1. 加载菜单(从文件或默认)

  2. 进入无限循环,等待用户输入

  3. 根据用户选择调用对应的功能

  4. 每次操作后如果修改了数据,就调用 save_menu 保存

    注意在每个分支中,我们都用 display_menu(menu) 让用户看到当前菜单再操作,这很符合实际需求。

    七、运行效果

    当你第一次运行程序时,会看到默认的四道菜。你可以尝试添加一道“可乐鸡翅 32”,删除“面条”,修改“炒菜”为“酸菜鱼 42”。每次操作后,menu_data.json 文件都会自动更新。关闭程序再打开,上次的修改依然存在。


    八、总结与思考

    通过这个完整的例子,我们学会了:

  5. 列表:如何存储一组数据,并通过索引访问。

  6. 字典:如何用键值对表示实体的多个属性。

  7. 函数:如何把重复逻辑封装起来,提高代码可读性和可维护性。

    • 文件操作:如何使用 JSON 实现数据的持久化。

    • 异常处理:如何让程序在意外情况下依然稳定运行。

      这个程序虽然不大,但涵盖了实际项目中非常常用的技术点。你可以在此基础上扩展,比如添加按价格排序、搜索菜品、批量导入导出等功能。

      希望这篇文章能帮助你更好地理解 Python 的这四个核心概念。如果你有任何问题,欢迎在评论区留言交流!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐