0

我正在编写一个脚本来计算 1900 年至 2099 年的复活节日期。问题是,对于 4 年(1954、1981、2049 和 2076),公式略有不同(即,日期已关闭 7天)。

def main():
    print "Computes the date of Easter for years 1900-2099.\n"

    year = input("The year: ")

    if year >= 1900 and year <= 2099:
        if year != 2049 != 2076 !=1981 != 1954:
            a = year%19
            b = year%4 
            c = year%7
            d = (19*a+24)%30
            e = (2*b+4*c+6*d+5)%7
            date = 22 + d + e     # March 22 is the starting date
            if date <= 31:
                print "The date of Easter is March", date
            else:
                print "The date of Easter is April", date - 31
        else: 
            if date <= 31:
                print "The date of Easter is March", date - 7 
            else:
                print "The date of Easter is April", date - 31 - 7
    else:
        print "The year is out of range."   


main()

Exerything 运行良好,但计算时间为 4 年。

我得到的是: if date <= 31: UnboundLocalError: local variable 'date' referenced before assignment每当我输入任何 4 年作为输入时。

4

1 回答 1

1

你不能像这样链接表达式;使用运算符链接测试and或使用not in表达式代替:

# and operators
if year != 2049 and year != 2076 and year != 1981 and year != 1954:

# not in expression
if year not in (2049, 2076, 1981, 1954):

该表达式的year != 2049 != 2076 !=1981 != 1954含义不同,它被解释为(((year != 2049) != 2076) !=1981) != 1954;第一个测试是Trueor False,这两个值都不会等于任何其他数字,并且该分支将始终评估为False

不过,您仍然会得到UnboundLocalErrorfor date,因为您的else分支引用date但它从未在该分支中设置。当else分支执行时,所有 Python 看到的是:

def main():
    print "Computes the date of Easter for years 1900-2099.\n"

    year = input("The year: ")

    if year >= 1900 and year <= 2099:
        if False:    
            # skipped
        else: 
            if date <= 31:
                print "The date of Easter is March", date - 7 
            else:
                print "The date of Easter is April", date - 31 - 7

并且date在这种情况下永远不会被赋值。您仍然需要date在该分支中单独计算,或者date值的计算完全移出if语句;我不熟悉复活节的计算,所以我不知道在这种情况下你需要做什么。

于 2013-02-02T13:43:30.347 回答