我怎样才能完成这个 python 程序,它实现了匿名公历 Computus 算法来计算复活节的日期?
How can I complete this python program that implements the Anonymous Gregorian Computus algorithm to compute the date of Easter?
我曾尝试使用这个 python 程序使用匿名公历计算算法来计算复活节在特定年份的日期,但我总是遇到一个错误。我的代码块输出了正确的结果,但我发现很难将 'st' 附加到 'st' 列表中的数字。
# Read the input from the user
year = int(input("Please enter a year to calculate the date of Easter: "))
a = year % 19
b = year // 100
c = year % 100
d = b // 4
e = b % 4
f =( b + 8) // 25
g = (b - f + 1) // 3
h = ((19 * a) + b - d - g + 15) % 30
i = c // 4
k = c % 4
l = (32 + (2 * e) + (2 * i) - h - k) % 7
m = (a + (11 * h ) + (22 * l)) // 451
month = (h + l - (7 * m) + (114)) // 31
day = 1 + (( h + l - (7 * m) + (114)) % 31)
st = ['1', '21', '31']
nd = ['2', '22']
rd = ['3', '23']
th = ['4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '24', '25', '26', '27', '28', '29', '30']
if day in st:
print("In the year", year, "Easter will fall on the", str(day) + "st", "of", month)
elif day in nd:
print("In the year", year, "Easter will fall on the", str(day) + "nd", "of", month)
elif day in rd:
print("In the year", year, "Easter will fall on the", str(day) + "rd", "of", month)
else:
print("In the year", year, "Easter will fall on the", str(day) + "th", "of", month)
使用这个算法,我计算了不同的年份来检查我的代码块是否正确,但是当我计算像 2024 年和 2040 年这样的复活节日期落在 'st' 列表中的日子时,我一直得到“第 31 和第 1”,而不是“第 31 和第 1”。我不知道我遗漏了哪些代码行。如果您能帮我解决这个问题或告诉我如何最好地计算它,我将不胜感激。
PS: 我已经搜索过其他类似的问题,但我解决的问题是用完全不同的语言,我没有找到使用 Anonymous Gregorian Computus Algorithm 计算复活节日期的问题.
谢谢。
您可以使用 Python 解释器轻松查看您的问题:
$ python3
>>> st = ['1', '21', '31']
>>> 21 in st
False
>>> '21' in st
True
字符串和数字是不同的东西。你计算一个数字,所以你的测试必须是数字。
$ python3
>>> st = [1, 21, 31]
>>> 21 in st
True
您应该使用集合而不是列表来进行包含测试。在这种情况下,它并没有太大的区别,但如果有很多值,养成一个好习惯。
我曾尝试使用这个 python 程序使用匿名公历计算算法来计算复活节在特定年份的日期,但我总是遇到一个错误。我的代码块输出了正确的结果,但我发现很难将 'st' 附加到 'st' 列表中的数字。
# Read the input from the user
year = int(input("Please enter a year to calculate the date of Easter: "))
a = year % 19
b = year // 100
c = year % 100
d = b // 4
e = b % 4
f =( b + 8) // 25
g = (b - f + 1) // 3
h = ((19 * a) + b - d - g + 15) % 30
i = c // 4
k = c % 4
l = (32 + (2 * e) + (2 * i) - h - k) % 7
m = (a + (11 * h ) + (22 * l)) // 451
month = (h + l - (7 * m) + (114)) // 31
day = 1 + (( h + l - (7 * m) + (114)) % 31)
st = ['1', '21', '31']
nd = ['2', '22']
rd = ['3', '23']
th = ['4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '24', '25', '26', '27', '28', '29', '30']
if day in st:
print("In the year", year, "Easter will fall on the", str(day) + "st", "of", month)
elif day in nd:
print("In the year", year, "Easter will fall on the", str(day) + "nd", "of", month)
elif day in rd:
print("In the year", year, "Easter will fall on the", str(day) + "rd", "of", month)
else:
print("In the year", year, "Easter will fall on the", str(day) + "th", "of", month)
使用这个算法,我计算了不同的年份来检查我的代码块是否正确,但是当我计算像 2024 年和 2040 年这样的复活节日期落在 'st' 列表中的日子时,我一直得到“第 31 和第 1”,而不是“第 31 和第 1”。我不知道我遗漏了哪些代码行。如果您能帮我解决这个问题或告诉我如何最好地计算它,我将不胜感激。
PS: 我已经搜索过其他类似的问题,但我解决的问题是用完全不同的语言,我没有找到使用 Anonymous Gregorian Computus Algorithm 计算复活节日期的问题.
谢谢。
您可以使用 Python 解释器轻松查看您的问题:
$ python3
>>> st = ['1', '21', '31']
>>> 21 in st
False
>>> '21' in st
True
字符串和数字是不同的东西。你计算一个数字,所以你的测试必须是数字。
$ python3
>>> st = [1, 21, 31]
>>> 21 in st
True
您应该使用集合而不是列表来进行包含测试。在这种情况下,它并没有太大的区别,但如果有很多值,养成一个好习惯。