青训/简单:小C的外卖超时判断

青训/简单:小C的外卖超时判断

文章目录

  • 青训/简单:小C的外卖超时判断
    • 问题描述
      • 测试样例
    • 示例
    • 思路:
    • 答案
    • python补充知识
      • 1、hours, minutes = map(int, t.split(':')) 是啥意思->map指最后结果为int,而根据t的数字个数,对应赋值给前面的变量,例如t的第一位赋给hours,第二赋给minutes
      • 2、接上,map 那如果t位数大于2,而没有变量承接,是否会报错?是的,会报错,因此处理如下方。
      • 3、如何预先处理,未知map内部t的位数?如下①确保处理格式 ②无法的值具体位数,则用*rest接收多余值 ③仅取需要的部分,map后,使用list转换并取list的[0:2] 0到2位。
      • 4、打印示例如下

问题描述

小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。

已知小C在时刻 `t1` 点了外卖,外卖平台上显示的预计送达时间为 `t2`,而实际送达时间为 `t3`。需要判断外卖是否超时。如果外卖超时,则输出 `"Yes"`;否则输出 `"No"`。

实际送达时间与预计送达时间在 `2` 小时之内。

测试样例

示例 1:

输入:t1 = "18:00", t2 = "19:05", t3 = "19:05"
输出:"No"

示例 2:

输入:t1 = "23:00", t2 = "00:21", t3 = "00:23"
输出:"Yes"

示例 3:

输入:t1 = "23:05", t2 = "00:05", t3 = "23:58"
输出:"No"

示例

def solution(t1: str, t2: str, t3: str) -> str:
    # write code here
    pass

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')

思路:

直接判断T3>T2 也就是实际送达大于预计送达,就是超时

实际处理:需要注意跨天的情况

答案

def solution(t1: str, t2: str, t3: str) -> str:
    # 将时间转换为分钟数
    def time_to_minutes(t):
        hours, minutes = map(int, t.split(':'))
        return hours * 60 + minutes
    
    # 转换所有时间为分钟
    t1_min = time_to_minutes(t1)
    t2_min = time_to_minutes(t2)
    t3_min = time_to_minutes(t3)
    
    # 处理跨天的情况
    # 如果预计送达时间小于下单时间,说明跨天了
    if t2_min < t1_min:
        t2_min += 24 * 60  # 加24小时的分钟数
    
    # 如果实际送达时间小于下单时间,说明跨天了
    if t3_min < t1_min:
        t3_min += 24 * 60
    
    # 判断是否超时
    return "Yes" if t3_min > t2_min else "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补充知识

实际上,我用Java作为主要语言,python是本次训练时候新使用的语言,因此python方法不熟悉,故做以下补充,日常复习

1、hours, minutes = map(int, t.split(‘:’)) 是啥意思->map指最后结果为int,而根据t的数字个数,对应赋值给前面的变量,例如t的第一位赋给hours,第二赋给minutes

  1. t.split(':')
    

    的作用是将时间字符串用冒号分割:

    • 比如 “18:00” 会被分割成 [“18”, “00”]
    • “19:05” 会被分割成 [“19”, “05”]
  2. map(int, split_result)
    

    的作用是将分割后的字符串转换为整数:

    • [“18”, “00”] 变成 [18, 0]
    • [“19”, “05”] 变成 [19, 5]
  3. hours, minutes = 是将转换后的两个数字分别赋值给 hours 和 minutes 变量

运行这个代码,你会看到详细的处理过程。比如对于第一个测试用例 “18:00”:

  1. 先被分割成 [“18”, “00”]
  2. 然后转换成整数 18 和 0
  3. 最后计算总分钟数 18 * 60 + 0 = 1080

2、接上,map 那如果t位数大于2,而没有变量承接,是否会报错?是的,会报错,因此处理如下方。

1 变量解包的规则:

  • 如果变量数量和值的数量不匹配,会报 ValueError
  • 变量太多会报错:not enough values to unpack
  • 值太多也会报错:too many values to unpack

2 处理多余值的方法:

  • 可以使用 *变量名 来接收多余的值,它会把多余的值放在一个列表中

  • 例如:h3, m3, *rest = map(int, "18:05:30:45".split(':'))

  • 结果:h3=18, m3=5, rest=[30, 45]

3、如何预先处理,未知map内部t的位数?如下①确保处理格式 ②无法的值具体位数,则用*rest接收多余值 ③仅取需要的部分,map后,使用list转换并取list的[0:2] 0到2位。

要处理这种情况,有几种方案:

  1. 确保输入数据格式正确
  2. 使用 *rest 接收多余的值
  3. 只取需要的部分,例如:hours, minutes = list(map(int, t.split(':')))[0:2]

4、打印示例如下

# 测试1:正常情况 - 两个值对应两个变量
print("=== 测试1:正常情况 ===")
t = "18:05"
print(f"原始字符串: {t}")
print(f"split后: {t.split(':')}")  # ['18', '05']
print(f"map后(转换为list查看): {list(map(int, t.split(':')))}")  # [18, 5]
hours, minutes = map(int, t.split(':'))
print(f"解包后 - hours: {hours}, minutes: {minutes}")  # hours: 18, minutes: 5

# 测试2:值的数量少于变量数量
print("\n=== 测试2:值少于变量 ===")
try:
    t = "18"  # 只有一个值
    print(f"原始字符串: {t}")
    print(f"split后: {t.split(':')}")
    h1, m1 = map(int, t.split(':'))
except ValueError as e:
    print(f"错误信息: {e}")

# 测试3:值的数量多于变量数量
print("\n=== 测试3:值多于变量 ===")
try:
    t = "18:05:30"  # 三个值
    print(f"原始字符串: {t}")
    print(f"split后: {t.split(':')}")
    print(f"map后(转换为list查看): {list(map(int, t.split(':')))}")
    h2, m2 = map(int, t.split(':'))
except ValueError as e:
    print(f"错误信息: {e}")

# 测试4:使用*接收多余的值
print("\n=== 测试4:使用*接收多余的值 ===")
t = "18:05:30:45"
print(f"原始字符串: {t}")
print(f"split后: {t.split(':')}")
print(f"map后(转换为list查看): {list(map(int, t.split(':')))}")
h3, m3, *rest = map(int, t.split(':'))
print(f"解包后 - hours: {h3}, minutes: {m3}, 剩余值: {rest}")
上一篇:如何在当前时刻采样上一拍的值?always_ff always-一、实现方式


下一篇:C语言中一般内存溢出的情况