计数输出

时间:2018-11-09 21:03:03

标签: python python-3.x

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

3 个答案:

答案 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(其中ab来计算((b - c)/4) + 1c(包括两者)之间的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