- year = int(input('year:'))
复制代码
第一行代码是输入年份,后面会判断它是闰年还是平年
- month = int(input('month:'))
复制代码
第二行代码是输入月份,后面会计算到它这个月之前的总天数
第三行代码计算输入天数,后面会和月数折算成天数后的值相加
- months = (0,31,59,90,120,151,181,212,243,273,304,334)
复制代码
第四行你不理解的这行代码是一个元组(元组和列表是很相似的,但是两者还是有区别的,区别在于元组中的元素是不可以改变的,而列表中的元素是可改变的),这个元组的作用是将1到12个月的累加天数存在其中,为后面的计算提供数值
- if 0 < month and month <= 12:
- sum = months[month - 1]
- else:
- print('亲,一年只有12个月!')
复制代码
这段代码的作用是去判断用户输入的月数是否满足要求,如果不满足要求则提示用户(亲,一年只有12个月)
满足条件执行的代码:
这句就是我之前所说的months这个元组为后面的计算提供数值的作用,提供用户输入的月数来获得对应的月数累加天数。
我知道你不明白的是为什么
对吧?因为元组和列表一样的他们的第一个元素是以下标0开始的,你去数months元组的个数是12个但是下标应该是从0到11,所以用户输入的month要减一,这样才能取得用户输入的月数的对应天数。
例如:用户输入的month值是3
第一步会去判断是否满足要求
满足要求就会执行
把数值带进去执行应该是:
结果:
如果是平年的话到三月份就是59天,因为一月份31天二月份28天
后面一句:
这句就是将刚刚将months中的值赋值给sum后的值再和用户输入的day的值相加
这个变量的赋值是为了后面判断是不是闰年,如果是就将其赋值1,因为闰年比平年多一天!
- [code]if year % 4 == 0 or year % 400 == 0:
- l = 1
复制代码
这段判断就是用来判断用户输入的year年份是不是闰年,如果是闰年就将l变量赋值为1,但是这个判断语句是不严谨的,因为判断是不是闰年要满足两个条件中的一个:
1.年份能够被400整除
2.年份能被4整除但不能被100整除
所以应该讲判断代码修改成如下代码:
- [code]if (year % 4 == 0 and year %100 !=) or (year % 400 == 0):
复制代码
这样最为严谨!!!
- if l == 1 and month > 2:#
- sum += 1
复制代码
这段代码是判断用户输入的年份是不是闰年,如果l变量的值为1就说明是闰年,因为前面一段代码判断是闰年就会将l变量的值赋值为了1,and是并且的意思,并且满足用户输入的月数是大于2的,因为只有大于了2才会涉及到是闰年还是平年,因为闰年二月份有29天而平年二月份有28天。
最后一行代码:
- print('这是 %s 年的第 %s 天!' % (year,sum))
复制代码
其中
是字符串的格式化输出,就是将year的值和sum的值传入对应的%s 所占的位置处,注意必须要一一对应!
这是一个知识点我建议你可以去看看格式化输出方面的内容(建议你百度一下Python格式化输出)。
或者看一下甲鱼老师的这篇帖子:
http://bbs.fishc.com/thread-92997-1-1.html