所谓闰年,一种简化的判断方法即是,能被4整除,如果能被100整除,而无法被400整除,这不是闰年:
所以其一贯的判断逻辑即是:
def isleap(y):
if y % 4:
return False
if y % 100 == 0 and y % 400 != 0:
return False
return True
判断逻辑较为复杂,稍作思考,我们可得如下的简化判断;
def isleap(n):
return True if ((n % 4 == 0) and (n % 100 != 0)) or n % 400 == 0 else False
这一做法的来源在于集合的观点,
真正符合条件的是文氏图中呈现灰色的两个部分(被4整除&&不能被100整除 || 被400整除),取二者的并集即可;
文氏图的绘制代码:
from matplotlib_venn import venn3
plt.figure(figsize=(4, 4))
v = venn3([set([1, 2, 3, 4]), set([2, 3 ,4]), set([3, 4])])
v.get_label_by_id('100').set_text('4')
v.get_label_by_id('110').set_text('100')
v.get_label_by_id('111').set_text(' 400')
v.get_patch_by_id('110').set_color('red')
v.get_patch_by_id('100').set_color('gray')
v.get_patch_by_id('111').set_color('gray')
v.get_label_by_id('A').set_text('')
v.get_label_by_id('B').set_text('')
v.get_label_by_id('C').set_text('')
plt.show()
关于文氏图的绘制方法请参见 使用 matplotlib 绘制文氏图(venn)