📋 题目分析
✅ 简单介绍
在本题中,我们需要实现一个简单的提醒程序,用户可以通过该程序查看、创建、取消提醒,并能够查看过去的、未来的或当前激活的提醒。
- 提醒数据格式:每个提醒有一个唯一的标识符、提醒内容、激活时间、取消时间(如果有的话)。提醒数据采用 CSV 格式存储。
- 提醒的状态:
- 激活提醒(active):如果提醒的“激活时间”已经过去,但取消时间尚未到达。
- 已过提醒(past):如果提醒的“激活时间”和“取消时间”都已经过去。
- 未来提醒(future):如果提醒的“激活时间”还未到达。
💡 解题思路
核心任务拆解
🧩 1. load_database(reminders_file)
功能:从指定的 CSV 文件加载提醒数据并存储到
reminders_database
中。每个提醒数据会包含提醒文本、激活时间、取消时间等信息。- 使用
csv
模块读取文件并将数据解析成提醒对象。数据应该保存在reminders_database
变量中。
🧩 2. get_active_reminders()
功能:返回当前所有处于激活状态的提醒。
- 条件:
active_from
时间已经过去且dismissed_at
时间尚未到达。
- 需要遍历所有提醒并根据时间进行过滤。
🧩 3. get_past_reminders()
功能:返回所有已经过期的提醒。
- 条件:
active_from
和dismissed_at
时间都已经过去。
- 需要遍历所有提醒并根据时间进行过滤。
🧩 4. get_future_reminders()
功能:返回所有未来的提醒。
- 条件:
active_from
时间还没有到达。
- 同样需要遍历所有提醒并根据时间进行过滤。
🧩 5. set_reminder(reminder_text, active_from)
功能:创建一个新的提醒。
reminder_text
是提醒的内容,active_from
是提醒的激活时间。
- 新提醒的
dismissed_at
默认为1970-01-01 10:00:00
。
- 新提醒的 ID 应该是当前数据库中最大的 ID 加 1。
🧩 6. dismiss_reminder(reminder_id)
功能:取消指定的提醒。
- 检查提醒是否存在,且是否处于有效状态。如果条件满足,更新其
dismissed_at
字段为当前时间。
🧩 7. 交互模块(reminders.py
)
功能:实现用户与提醒的交互逻辑。
- 用户可以查看激活的提醒,输入
dismiss <ID>
来取消指定提醒,或者输入remind me now <TEXT>
来创建一个当前激活的提醒。
- 如果输入是
remind at '<TIME>' <TEXT>
,则创建一个未来的提醒。
- 提供查看过去提醒和未来提醒的功能。
- 提供退出功能
quit
。
伪代码
📌 注意事项
- 时间的处理:
- 要正确处理提醒的时间,尤其是时间的比较。ISO 8601 格式的时间可以通过
datetime
模块进行解析和比较。 - 需要根据当前时间(
now
)与提醒的active_from
和dismissed_at
字段进行比较。
- 提醒状态的判断:
- 激活提醒:
active_from
已经过了,但dismissed_at
还没到。 - 已过提醒:
active_from
和dismissed_at
都已经过去。 - 未来提醒:
active_from
还未到达。
- 数据库的更新:
- 新增提醒时,要保证每个提醒的 ID 唯一且递增。
- 取消提醒时,要正确更新提醒的
dismissed_at
时间。
- 用户输入的处理:
- 提示用户输入时,要确保输入格式的正确性,并根据不同的命令做出响应。
- 需要处理
dismiss
、remind me now
、remind at
等命令,并相应更新提醒。
🧐 总结
本题要求我们构建一个提醒管理系统,支持查看、创建、取消提醒,并且对未来、已过、和当前的提醒进行分类显示。重点在于时间的比较和提醒状态的更新。同时,我们还需要与用户进行交互,接受并解析用户的命令,更新提醒数据。数据结构,一直都是比较容易头疼而且不方便debug的东西。耕者笔记完成一个个小要求最后合并到一起,问题不大,秒了。