def leap_years(start, end):
if start < 1500 or start > 2100:
return
if end < 1500 or end > 2100:
return
i = 0
for i in range(start, end + 1):
if i % 4 == 0 and (i % 100 != 0 or i % 400 == 0):
print(i)
print(leap_years(1998, 2008))
我想输出3,而不是2000,2004,2008
答案 0 :(得分:2)
您需要添加一个计数器:
def leap_years(start, end):
if start < 1500 or start > 2100:
return 0
if end < 1500 or end > 2100:
return 0
i, count = 0, 0
for i in range(start, end + 1):
if i % 4 == 0 and (i % 100 != 0 or i % 400 == 0):
count += 1
return count
print(leap_years(1998, 2008))
输出
3
在上面的代码中,计数器是变量count
,每当满足leap年条件时,它就会增加1
。请注意,现在函数leap_years
返回of年的数量。
答案 1 :(得分:2)
我们可以在此处使用sum(...)
来计算元素数量:
def leap_years(start, end):
if not 1500 < start < 2100:
return 0
if not 1500 < end < 2100:
return 0
return sum(
(not y % 4 and y % 100 != 0) or not y % 400
for y in range(start, end + 1)
)
之所以可行,是因为在Python中,True
等于1
,而False
等于0
,因此我们计算元素的数量。
但是,上面的方法不是很有效:实际上,我们可以计算大范围内的of年数,而不必对其进行迭代。
例如,我们可以通过计算4
(其中a
为b
来计算((b - c)/4) + 1
和c
(包括两者)之间的4
可除的元素数 next 元素可由def num_div(div, frm, to):
return max(0, (to - (frm + (div - frm) % div) + div) // div)
def leap_years(start, end):
return num_div(4, start, end) - num_div(100, start, end) + num_div(400, start, end)
划分。
使用相同的逻辑,我们可以排除可除以100的元素数量,并包括可除以400的元素数量,例如:
>>> leap_years(1234, 123456789)
29937972
例如,假设始终存在带有这些规则的公历,则公元1234年至123'456'789年之间的leap年数为:
total([hours] for [Year], [Month], [User])
答案 2 :(得分:0)
这是考虑列表理解以创建leap年列表的好地方:
def leap_years(start, end):
if start < 1500 or start > 2100:
return
if end < 1500 or end > 2100:
return
leaps = [ i for i in range(start, end+1) if i % 4 == 0 and (i % 100 != 0 or i % 400 == 0) ]
print( len(leaps) )
leap_years(1998,2008)
结果是: 3