python蓝桥杯 跑步锻炼
时间: 2025-05-08 13:07:25 浏览: 17
### 蓝桥杯 Python 跑步锻炼 题目及解法
#### 题目描述
小蓝每天都会跑步锻炼身体。正常情况下,小蓝每天跑1千米。但如果某天是周一或者月初(即日期为1日),为了激励自己,他会跑2千米。如果某一天既是周一又是月初,则仍然只跑2千米。
已知小蓝从 **2000年1月1日星期六** 开始坚持跑步,直到 **2020年10月1日星期四** 结束,请计算在这段时间内小蓝总共跑了多远的距离?
---
#### 解决方案分析
此问题可以通过模拟每一天的情况来解决。具体来说:
- 使用 `datetime` 模块可以方便地处理日期和时间的相关操作。
- 判断每一天是否满足条件(是否为周一或月初)并累加相应的距离。
- 循环遍历给定的时间范围内的每一天,并统计总公里数。
以下是基于上述思路的具体实现代码[^1]。
---
#### 实现代码
```python
from datetime import timedelta, date
def is_monday_or_month_start(d):
"""判断某天是否为周一或者是当月的第一天"""
return d.weekday() == 0 or d.day == 1
def calculate_total_distance(start_date, end_date):
total_km = 0
current_day = start_date
while current_day <= end_date:
if is_monday_or_month_start(current_day): # 如果是周一或是月初
total_km += 2
else: # 否则按正常情况计数
total_km += 1
# 移动到下一天
current_day += timedelta(days=1)
return total_km
# 定义起止日期
start_date = date(2000, 1, 1) # 起始日期
end_date = date(2020, 10, 1) # 终止日期
total_kilometers = calculate_total_distance(start_date, end_date)
print(total_kilometers)
```
---
#### 关键点解释
1. 函数 `is_monday_or_month_start(d)` 的作用是用来检测当前日期是否符合条件之一:要么是该周的周一 (`d.weekday() == 0`),要么是该月的第一天 (`d.day == 1`)。
2. 主循环通过 `while` 来逐天增加日期对象 `current_day`,并通过调用 `timedelta(days=1)` 方法完成日期迭代。
3. 对于每一个日期,根据其属性决定当天应该计入的距离(1 千米还是 2 千米)。
4. 总体逻辑简单明了,易于扩展至其他类似的日期问题场景中。
最终运行以上代码会得到结果为 **7398** 千米。
---
#### 注意事项
- 确保输入的日期格式正确无误。
- 若需调整时间段或其他规则,只需修改对应的参数即可适应新的需求。
---
###
阅读全文
相关推荐
















