所以我想这段代码应该返回一个与年份列表中最接近的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
答案 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年不是年份本身,这似乎是问题的约束...