一次完整的编程练习,带你掌握Python列表、字典、文件操作和异常处理


一、项目缘起

最近沉迷《恋与深空》这款游戏,被五位男主角的魅力深深吸引。突发奇想,能不能用Python写一个“约会对象管理系统”,不仅能查看各位男主的信息,还能添加、删除、修改,甚至随机选择一位作为“一日男友”?

说干就干!这个项目不仅满足了我的小趣味,更是一次绝佳的Python综合练习。下面我就把整个开发过程分享给大家。


二、项目需求分析

一个完整的约会对象管理系统应该具备以下功能:

功能 描述
查看所有对象 以表格形式展示所有约会对象的信息
添加对象 输入新对象的基本信息,添加到列表中
删除对象 根据序号删除指定的约会对象
修改对象 替换指定序号的对象信息
选择对象 从列表中选择一位作为“一日男友”
数据持久化 程序关闭后数据不丢失

三、数据结构设计

我选择了 列表嵌套字典 的数据结构:

love = [
    {'name': '沈星回', 'age': 23, 'high': 185, 'evol': '光', 'career': '深空猎人'},
    {'name': '秦彻', 'age': 28, 'high': 185, 'evol': '能量操控', 'career': '暗点组织首领'},
    {'name': '祁煜', 'age': 24, 'high': 183, 'evol': '火', 'career': '天才艺术家'},
    {'name': '黎深', 'age': 27, 'high': 186, 'evol': '冰', 'career': 'Akso医院心脏外科主任医师'},
    {'name': '夏以昼', 'age': 25, 'high': 188, 'evol': '引力控制', 'career': '远空舰队执舰官'}
]

为什么这样设计?

  • 列表负责管理顺序(第1个、第2个...)

  • 字典负责存储每个对象的多个属性

  • 访问方式:love[0]['name'] 获取第1个人的名字


四、核心功能实现

1. 显示所有对象(表格对齐)

def all_lover():
    print(f'{"序号":<4} {"姓名":<6} {"年龄":<4} {"身高":<4} {"evol":<6} {"职业":<12}')
    for i, j in enumerate(love, start=1):
        print(f'{i}号   {j["name"]:<6} {j["age"]:<4} {j["high"]:<4} {j["evol"]:<6} {j["career"]:<12}')

关键点:使用 {变量:<宽度} 实现左对齐,让表格更美观。

2. 添加约会对象

def love_1():
    a = {}
    name = input('请输入约会对象的名称:').strip()
    age = int(input('请输入约会对象的年龄:'))
    high = int(input('请输入约会对象的身高(cm):'))
    evol = input('请输入约会对象的evol:').strip()
    career = input('请输入约会对象的职业:').strip()
    
    a['name'] = name
    a['age'] = age
    a['high'] = high
    a['evol'] = evol
    a['career'] = career
    love.append(a)

3. 删除对象

def delete_lover(index):
    deleted = love.pop(index)
    print(f'成功删除:{deleted["name"]}')

4. 主程序循环

while True:
    print('1.查看约会对象 2.添加对象 3.删除对象 4.修改对象 5.退出')
    choice = int(input('请进行选择:'))
    
    if choice == 1:
        all_lover()
    elif choice == 2:
        love_1()
    elif choice == 3:
        all_lover()
        del_num = int(input('请输入删除的号码:'))
        delete_lover(del_num - 1)
    elif choice == 5:
        print('下次光临!')
        break

五、进阶优化:异常处理与文件存储

为什么需要异常处理?

用户输入可能不是数字、可能超出范围、文件可能损坏... 如果不处理,程序会直接崩溃。

def get_valid_input(prompt, min_val, max_val):
    while True:
        try:
            value = int(input(prompt))
            if min_val <= value <= max_val:
                return value
            print(f"请输入 {min_val} 到 {max_val} 之间的数字")
        except ValueError:
            print("请输入有效的数字!")

数据持久化:保存到JSON文件

import json
import os

DATA_FILE = 'love_data.json'

def load_data():
    if os.path.exists(DATA_FILE):
        with open(DATA_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    return default_data

def save_data(data):
    with open(DATA_FILE, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

六、完整代码结构图

约会对象管理系统
│
├── 数据层
│   ├── load_data()      # 从文件加载数据
│   └── save_data()      # 保存数据到文件
│
├── 业务逻辑层
│   ├── all_lover()      # 显示所有对象
│   ├── love_1()         # 添加对象
│   ├── delete_lover()   # 删除对象
│   └── modify_lover()   # 修改对象
│
├── 工具函数
│   └── get_valid_input() # 输入验证
│
└── 主程序循环
    └── while True        # 菜单交互

七、运行效果演示

==================================================
欢迎使用约会对象选择系统
==================================================

1.查看能选择的约会对象 2.添加约会对象 3.删除约会对象 4.修改约会对象 5.退出
请进行选择:1

序号   姓名   年龄  身高  evol   职业          
1号   沈星回   23   185  光     深空猎人      
2号   秦彻     28   185  能量操控 暗点组织首领  
3号   祁煜     24   183  火     天才艺术家    
4号   黎深     27   186  冰     Akso医院心脏外科主任医师
5号   夏以昼   25   188  引力控制 远空舰队执舰官

你要选择几号约会对象:3
祁煜 将作为你的一日男友

祝您和 祁煜 约会愉快,度过美好的一天!!!

八、项目总结与心得

学到的知识点

知识点 应用场景
列表与字典 存储多个对象及其属性
enumerate 遍历时获取索引和值
格式化输出 {:<宽度} 实现表格对齐
try/except 捕获输入错误和文件异常
json 模块 数据的持久化存储
os.path 检查文件是否存在

可以继续扩展的功能

  • 随机推荐:随机选择一位作为约会对象

  • 搜索功能:根据姓名或职业筛选

  • 排序功能:按年龄、身高排序

  • 统计功能:显示总人数、平均年龄等

  • 图形界面:用 tkinter 或 pyqt 做GUI


结语:编程的乐趣,就在于能把想法变成现实。一个小小的约会对象管理系统,既满足了兴趣,又锻炼了编程能力。希望这篇博客能给正在学习Python的你一些启发!

如果你有任何问题或建议,欢迎在评论区留言讨论~

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐