Lazy loaded image
Task 7 - Forget Me Not
Words 1416Read Time 4 min
2025-4-27

📋 题目分析

✅ 简单介绍

在本题中,我们需要实现一个简单的提醒程序,用户可以通过该程序查看、创建、取消提醒,并能够查看过去的、未来的或当前激活的提醒。
  1. 提醒数据格式:每个提醒有一个唯一的标识符、提醒内容、激活时间、取消时间(如果有的话)。提醒数据采用 CSV 格式存储。
  1. 提醒的状态
      • 激活提醒(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_fromdismissed_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

伪代码

📌 注意事项

  1. 时间的处理
      • 要正确处理提醒的时间,尤其是时间的比较。ISO 8601 格式的时间可以通过 datetime 模块进行解析和比较。
      • 需要根据当前时间(now)与提醒的 active_fromdismissed_at 字段进行比较。
  1. 提醒状态的判断
      • 激活提醒:active_from 已经过了,但 dismissed_at 还没到。
      • 已过提醒:active_fromdismissed_at 都已经过去。
      • 未来提醒:active_from 还未到达。
  1. 数据库的更新
      • 新增提醒时,要保证每个提醒的 ID 唯一且递增。
      • 取消提醒时,要正确更新提醒的 dismissed_at 时间。
  1. 用户输入的处理
      • 提示用户输入时,要确保输入格式的正确性,并根据不同的命令做出响应。
      • 需要处理 dismissremind me nowremind at 等命令,并相应更新提醒。

🧐 总结

本题要求我们构建一个提醒管理系统,支持查看、创建、取消提醒,并且对未来、已过、和当前的提醒进行分类显示。重点在于时间的比较和提醒状态的更新。同时,我们还需要与用户进行交互,接受并解析用户的命令,更新提醒数据。数据结构,一直都是比较容易头疼而且不方便debug的东西。耕者笔记完成一个个小要求最后合并到一起,问题不大,秒了。