Python:计算年份时发生逻辑错误(跨越)

时间:2018-10-26 21:56:03

标签: python python-3.x

所以我想这段代码应该返回一个与年份列表中最接近的leap年的列表。

例如:用[1995 1750 2018]调用函数应返回

1996 1748 2016

它适用于那组数字。

我遇到的问题是,例如在输入{年2008时,它不会给我返回最接近2008的leap年。我回来了2008

关于如何修改代码使其起作用的任何建议?

代码

def is_leap(year):
    leap = False


    if year % 4 == 0:
        if year % 100 != 0 or year % 400 == 0:
            leap = True

    return leap


major_b = []
major_f = []
newLst = []


def year_forward(yearBounds):

    for item in yearBounds:
        counter = 0

        while not is_leap(item):
            item = item + 1
            counter += 1


         major_f.append([item, counter])
    return major_f


def year_backward(yearBounds):

    for item in yearBounds:
        counter = 0
        while not is_leap(item):
            item = item - 1
            counter -= 1


        major_b.append([item,counter])

    return major_b






def findLastLeapYears(yearBounds):

    forward =  year_forward(yearBounds)
    backward = year_backward(yearBounds)



    counter = 0
    for item in forward:
        if abs(item[1]) < abs(backward[counter][1]):
            newLst.append (str(item[0]))
            counter+=1
        elif abs(item[1]) == abs(backward[counter][1]):
            if item[0] < backward[counter][0]:
                newLst.append (str(item[0]))
                counter += 1
            else:
                newLst.append (str(backward[counter][0]))
                counter += 1

        else:
            newLst.append (str(backward[counter][0]))
            counter+=1

    return newLst

1 个答案:

答案 0 :(得分:4)

我会避免尝试投放自己的leap年检测代码。使用calendar.isleap确定年份是否为a年。

然后像这样循环循环:

    import calendar    
    def find_nearest_leap(year):
        offset = 1
        while True:
           if calendar.isleap(year - offset):
               return year - offset
           if calendar.isleap(year + offset):
               return year + offset
           offset += 1

要查找值列表中最接近的leap年列表,请执行以下操作:

nearest_leap_years = [find_nearest_leap(year) for year in years]

years是您感兴趣的年份列表。

我还假设最近的leap年不是年份本身,这似乎是问题的约束...