python判断日期为第几天_Python练习题 004:判断某日期是该年的第几天

【Python练习题 004】输入某年某月某日,判断这一天是这一年的第几天?

----------------------------------------------

这题竟然写了 28 行代码!而且还不包含输入数据的验证(只能假设输入的日期是严格按照格式来的)。但我坚信,一定有更简洁的方法,比如 Python 对日期的处理。

不过反正还没学到这些知识,现在只能用傻大粗的办法解决。等学到高级的办法再来更新吧~~~

思路:先判断是否为闰年,这关系到 2 月份的天数。之后再根据月份值把前几个月的天数累积加起来,最后再加上个“日”,就可以了。

1 dat = input('请输入某年某月某日,格式为 yyyy-mm-dd :')2 y = int(dat[0:4]) #获取年份

3 m = int(dat[5:7]) #获取月份

4 d = int(dat[8:]) #获取日

5

6 ly =False7

8 if y%100 == 0: #若年份能被100整除

9 if y%400 == 0: #且能被400整除

10 ly = True #则是闰年

11 else:12 ly =False13 elif y%4 == 0: #其它情况下,若能被4整除

14 ly = True #则为闰年

15 else:16 ly =False17

18 if ly == True: #若为闰年,则2月份有29天

19 ms = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]20 else:21 ms = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]22

23 days =024 for i in range(1, 13): #从1到12逐一判断,以确定月份

25 if i ==m:26 for j in range(i-1): #确定月份i之后,则将ms列表中的前i-1项相加

27 days +=ms[j]28 print('%s是该年份的第%s天。' % (dat, (days + d))) #最后再加上“日”,即是答案

请大神帮忙简化下这渣代码。跪谢!

【2016-10-13 更新】-------------------------------------------------------------

查了下文档,发现有个 datetime 的库,似乎可以用来解这题。代码如下:

import datetime

y = int(input('请输入4位数字的年份:')) #获取年份

m = int(input('请输入月份:')) #获取月份

d = int(input('请输入是哪一天:')) #获取“日”

targetDay = datetime.date(y, m, d) #将输入的日期格式化成标准的日期

print(targetDay - datetime.date(targetDay.year-1, 12, 31)) #减去上一年最后一天,可得解

思路也很简单:获取目标日期,然后减去上一年度的最后一天,就可以得出该日期是当年的第几天。输出结果如下:

请输入4位数字的年份:2016

请输入月份:12

请输入是哪一天:31

366 days, 0:00:00

但就是不知道怎样把这个结果 “366 days, 0:00:00” 处理一下、让只剩下 “366” 这个数值…… datetime库还得多研究研究才行。

【2016-10-13 更新】-------------------------------------------------------------

又好好查了查 官方文档,发现上述代码输出的结果是 datetime.timedelta(),可以用 datetime.timedelta.days 轻松提取天数。更新代码如下:

import datetime

y = int(input('请输入4位数字的年份:')) #获取年份

m = int(input('请输入月份:')) #获取月份

d = int(input('请输入是哪一天:')) #获取“日”

targetDay = datetime.date(y, m, d) #将输入的日期格式化成标准的日期

dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31) #减去上一年最后一天

print('%s是%s年的第%s天。'% (targetDay, y, dayCount.days))

输出结果如下:

请输入4位数字的年份:2016

请输入月份:5

请输入是哪一天:1

2016-05-01是2016年的第122天。

当然,正式用的时候,肯定还得验证输入字符的合理性,比如月份只能是 range(1,13),再比如如果是闰年且月份为2,则“天”只能是 range(1,29)等等,这里就不多写了~~~

++++++++++++++++++++++++++++++++++++++++++++++

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 的 `datetime` 库来解决这个问题。代码示例如下: ``` import datetime def year_day(year, month, day): date = datetime.datetime(year, month, day) return date.strftime("%j") ``` 调用时可以这样: ``` year_day(2022, 3, 3) # 输出 "062" ``` 其中,`%j` 表示一中的第几天。 ### 回答2: 题目分析: 这道题需要我们考虑几个问题,首先是如何输入某某月某日,这需要用到python中的input函数;其次需要判断输入的份是否是闰,因为闰与非闰每个月的天数是不同的;最后需要计算出输入的日期是这一第几天,所以要进行天数的累加。 解题思路: 首先,通过input函数输入月日,分别保存到、月、日三个变量中,由于input函数输入的是字符串类型,需要用int()函数将其转换为整数类型。 然后,需要判断输入的份是否是闰,通过判断份是否能够被4整除并且不能被100整除,或者能够被400整除,如果是,则当前份是闰,否则不是。 接下来,需要判断输入的月份有多少天。根据闰与非闰每个月的天数不同,我们可以先将每个月的天数保存在一个列表中,然后通过判断输入的份是否是闰来选择从哪个列表中获取每个月的天数。最后,对输入的月份之前的所有天数求和,再加上输入的日期,就是这一第几天。 具体实现: 以下是具体的代码实现(Python3): ```Python year = int(input("请输入份:")) month = int(input("请输入月份:")) day = int(input("请输入日期:")) # 判断是否是闰 if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: is_leap = True else: is_leap = False # 每个月的天数 month_days = [31, 28 + is_leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 计算当天是这一第几天 day_count = sum(month_days[:month-1]) + day print(f"{year}{month}月{day}日是这一的第{day_count}天。") ``` 总结: 通过以上的代码实现,我们可以判断任意一个日期是这一第几天。对于python初学者来说,实现该题目是一次较好的练习机会,可以对输入输出、条件判断、列表等python内容进行进一步的巩固和学习。 ### 回答3: 首先,我们需要知道一中每个月的天数。通常一中有12个月,分别为1月到12月。其中1月、3月、5月、7月、8月、10月、12月共有31天,4月、6月、9月、11月共有30天,2月则分为闰和平。闰2月有29天,平2月有28天。判断某一是否是闰,我们需要用到以下规则: 1.普通闰:公历份是4的倍数的,一般是闰。 2.世纪闰:公历份是整百数的,必须是400的倍数才是闰。 因此,我们可以先写出判断的函数,代码如下: def is_leap_year(year): return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 接着我们可以编写计算天数的函数,流程如下: 1.判断是否是闰,确定2月的天数; 2.根据月份计算出前面几个月的总天数; 3.加上当前月份的天数,得到结果。 代码如下: def get_day_of_year(year, month, day): # 判断月份是否合法 if month not in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]: raise ValueError('Invalid month') # 判断天数是否合法 if day < 1 or day > 31: raise ValueError('Invalid day') # 判断是否是闰,确定2月的天数 if is_leap_year(year): days_of_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] else: days_of_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 计算前面几个月的总天数 days = sum(days_of_month[:month - 1]) # 加上当前月份的天数 days += day return days 最后,我们可以调用这个函数来计算某一天是在这一第几天。例如,输入20225月1日,运行代码如下: get_day_of_year(2022, 5, 1) 结果为121,即5月1日是2022的第121天。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值