首页 > 解决方案 > 查找闰年作业

问题描述

垃圾值被发送到函数而不是实际参数。我的代码有什么问题?

def find_leap_years(given_year):
    i=0
    count=0
    while(count<15):
        print(given_year)
        if(given_year%4==0)and(given_year%400==0):
            if(given_year%100!=0):
                list_of_leap_years[i]=given_year
                i+=1
                count+=1
        given_year+=1

    return list_of_leap_years

list_of_leap_years=find_leap_years(2000)
print(list_of_leap_years)

标签: python

解决方案


这里有几个重叠的错误,一个让另一个更难找到。

  1. 闰年测试有错误。应该是if given_year % 4 == 0: if given_year % 100 != 0 or given_year % 400 == 0:。也就是说,如果一年能被4整除,则为闰年;但如果它可以被 100 整除,则不是,除非它也可以被 400 整除。此错误的结果是您的原始if-test 仅True每 400 年一次,因此循环将运行直到它测试了 6,000 年。我怀疑你在这发生之前就中断了程序,所以你没有在if-test 中看到问题。

  2. 这行不通:list_of_leap_years[i] = given_year. 如果您的代码曾经达到这一点,您就会得到错误list assignment index out of range。那是因为您不能简单地通过分配不存在的元素来扩展列表。如果要将新值添加到列表的末尾,请使用append: list_of_leap_years.append(given_year)

  3. 该函数返回list_of_leap_years但未定义它。该函数应首先将其创建为一个空列表。

修复这些问题,函数将如下所示:

def find_leap_years(given_year):
    list_of_leap_years = []
    count=0
    while count < 15:
        if given_year % 4 == 0:
            if given_year % 100 != 0 or given_year % 400 == 0:
                list_of_leap_years.append(given_year)
                count += 1
        given_year += 1
    return list_of_leap_years

我删除了列表索引i,因为您不需要它来跟踪闰年列表有多少元素。如果您需要发现它,请使用len(list_of_leap_years).


推荐阅读