python 实例四
https://www.cnblogs.com/evablogs/p/6754981.html
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:
月份天数:
| 月份 | 天数 |
| 2 | 平年28天,闰年29天 |
| 1,3,5,7,8,10,12 | 31 |
| 4,6,9,11 | 30 |
闰年:
1、非整百年:能被4整除的为闰年。(如2004年就是闰年,2100年不是闰年)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
>>> L=[31,31,30,31,30,31,31,30,31,30,31]>>> def caldate(a,b,c): s=0 if(a%100!=0 and a%4==0 or a%100==0 and a%400==0): L.insert(1,29) else: L.insert(1,28) for i in range(b-1): s=s+L[i] return s+c>>> caldate(2016,1,2)2>>> caldate(2016,3,2)62 |
改进版:考虑了月份和天数的有效性(哈哈,对比网上的答案,一看自己的代码就像是菜鸟级的,还有很多需要学习的地方)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
def caldate(a,b,c): L=[31,31,30,31,30,31,31,30,31,30,31] s=0 Leap=0 if(a%100!=0 and a%4==0 or a%100==0 and a%400==0): L.insert(1,29) Leap=1 else: L.insert(1,28) if 0<b<=12: if 0<c<=31: if((b==2)and(Leap==1)and(c<=29)or((b==2)and(Leap==0)and(c<=28))): for i in range(b-1): s=s+L[i] return s+c else: print 'The February should not greater than 28 or 29' else: print 'The date is error' else: print 'The month is invalid' |
输出:
|
1
2
3
4
5
6
7
8
9
10
|
>>> caldate(2016,4,33)The date is error>>> caldate(2017,2,30)The February should not greater than 28 or 29>>> caldate(2017,2,28)59>>> caldate(2017,2,29)The February should not greater than 28 or 29>>> caldate(2017,13,29)The month is invalid |
网上答案:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/usr/bin/python# -*- coding: UTF-8 -*- year = int(raw_input('year:\n'))month = int(raw_input('month:\n'))day = int(raw_input('day:\n')) months = (0,31,59,90,120,151,181,212,243,273,304,334)if 0 < month <= 12: sum = months[month - 1]else: print 'data error'sum += dayleap = 0if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): leap = 1if (leap == 1) and (month > 2): sum += 1print 'it is the %dth day.' % sum |
输出结果:
|
1
2
3
4
5
6
7
|
year:2015month:6day:7it is the 158th day. |

浙公网安备 33010602011771号