【深基 2.例 12】上学迟到

题目描述

学校和 yyy 的家之间的距离为 ss 米,而 yyy 以 vv 米每分钟的速度匀速走向学校。

在上学的路上,yyy 还要额外花费 1010 分钟的时间进行垃圾分类。

学校要求必须在上午 8:00\textrm{8:00} 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。

由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。

输入格式

一行两个正整数 s,vs,v,分别代表路程和速度。

输出格式

输出一个 2424 小时制下的时间,代表 yyy 最晚的出发时间。

输出格式为 HH:MM\texttt{HH:MM},分别代表该时间的时和分。必须输出两位,不足前面补 00

样例 #1

样例输入 #1

1
100 99

样例输出 #1

1
07:48

提示

对于 100%100\% 的数据,1s,v1041 \le s,v \le 10^4

题解

1
2
3
4
5
6
7
8
9
from datetime import datetime, timedelta

s, v = map(int, input().split())
t = s / v + 10 # 需要花费的总时间(分钟)
ddl = datetime.strptime("08:00", "%H:%M")
time = timedelta(minutes=t)
end_time = ddl - time
print(end_time.strftime("%H:%M"))

题解解释

这段代码用于解决一个问题,即计算在不迟到的前提下,某人最晚能什么时候出门以及什么时候到达学校。

首先,代码从标准输入中读取两个整数,分别表示路程 s 和速度 v。这两个值是由空格分隔的。这段代码使用了 map(int, input().split()) 来同时读取输入的两个整数,并将其分别赋值给变量 sv

接下来,计算需要花费的总时间 t。总时间等于路程 s 除以速度 v,再加上额外的 1010 分钟用于垃圾分类。因此,t = s / v + 10,单位是分钟。

然后,使用 datetime.strptime("08:00", "%H:%M") 将字符串时间 “08: 00” 转换为 datetime 对象,表示学校的到达时间。这里使用了 "%H:%M" 格式指定解析的时间格式。

接着,使用 timedelta(minutes=t) 创建一个时间间隔对象,表示需要花费的总时间。

最后,通过 ddl - time 计算出最晚出门的时间,即学校的到达时间减去需要花费的总时间,得到了 end_time。然后,通过 end_time.strftime("%H:%M")end_time 格式化为 “%H:%M” 格式的字符串,并打印出来。

整体而言,这段代码的作用是计算在不迟到的前提下,某人最晚能在什么时间出门。

知识点

利用这题学习一下时间的计算

当涉及到时间计算时,这段代码涵盖了以下几个关键的知识点:

  1. 时间表示:使用 datetime 模块中的 datetime 类来表示具体的时间点。
  2. 时间间隔表示:使用 timedelta 类来表示时间间隔。
  3. 时间格式化:使用 strftime 方法将 datetime 对象格式化为指定格式的字符串。
  4. 时间加减法:通过 datetime 对象和 timedelta 对象进行加减法运算,实现时间的加减操作。
  5. 时间字符串转换:使用 strptime 方法将字符串时间解析为 datetime 对象。

这些知识点在处理时间相关的计算和操作时非常重要,并且在实际开发中经常会被用到。

只想要结果保留小时和分钟部分,可以使用 strftime 方法来格式化输出结果。

例如 print(end_time.strftime("%H:%M"))