小C的外卖超时判断 | 豆包MarsCode AI刷题

75 阅读3分钟

题目

1732106749874.png

代码实现

from datetime import datetime, timedelta

def solution(t1: str, t2: str, t3: str) -> str:
    # 定义时间格式
    time_format = "%H:%M"
    
    # 将时间字符串转换为 datetime 对象
    dt1 = datetime.strptime(t1, time_format)
    dt2 = datetime.strptime(t2, time_format)
    dt3 = datetime.strptime(t3, time_format)
    
    # 处理跨天的情况
    if dt2 < dt1:
        dt2 += timedelta(days=1)
    if dt3 < dt1:
        dt3 += timedelta(days=1)
    
    # 判断是否超时
    if dt3 > dt2:
        return "Yes"
    else:
        return "No"

if __name__ == '__main__':
    print(solution("18:00", "19:05", "19:05") == 'No')
    print(solution("23:00", "00:21", "00:23") == 'Yes')
    print(solution("23:05", "00:05", "23:58") == 'No')

分析

为了判断外卖是否超时,我们需要将时间字符串转换为可以进行比较的时间格式。Python 的 datetime 模块非常适合处理这种时间相关的任务。我们可以将时间字符串转换为 datetime 对象,然后进行比较。

步骤详解

  1. 解析时间字符串

    • 使用 datetime.strptime 方法将时间字符串转换为 datetime 对象。
    • 时间格式定义为 "%H:%M",表示小时和分钟。
  2. 处理跨天的情况

    • 如果预计送达时间 t2 小于下单时间 t1,说明 t2 是第二天的时间,需要加上一天的时间。
    • 同理,如果实际送达时间 t3 小于下单时间 t1,也需要加上一天的时间。
  3. 比较时间

    • 如果实际送达时间 t3 大于预计送达时间 t2,则外卖超时,返回 "Yes"。
    • 否则,外卖未超时,返回 "No"。

个人思考与分析

  1. 时间格式的重要性

    • 时间格式 "%H:%M" 是一个常用的格式,表示小时和分钟。正确的时间格式可以确保时间字符串被正确解析为 datetime 对象。
    • 如果时间格式不正确,可能会导致解析错误,从而影响后续的比较操作。
  2. 跨天处理的必要性

    • 在处理时间问题时,经常会遇到跨天的情况。例如,晚上下单,第二天早上送达。如果不处理跨天的情况,可能会导致时间比较出错。
    • 使用 timedelta(days=1) 可以方便地将时间向前或向后推移一天,从而正确处理跨天的情况。
  3. 时间比较的逻辑

    • 比较时间时,需要确保所有时间都在同一个时间范围内。例如,如果 t2 和 t3 都在第二天,而 t1 在第一天,直接比较可能会出错。
    • 通过处理跨天的情况,确保所有时间都在同一个时间范围内,可以避免比较错误。

总结

通过使用 datetime 模块,我们可以轻松地处理时间相关的任务。在处理外卖超时问题时,我们需要特别注意时间格式的正确性和跨天情况的处理。通过合理的代码设计和测试用例,可以确保我们的解决方案在各种情况下都能正确运行。