我怎样才能完成这个实现匿名公历计算算法来计算复活节日期的Python程序?

问题描述 投票:0回答:2

我尝试使用匿名格里高利计算算法使用这个 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”列表中的日子时,我不断得到“31th”和第 1 次”而不是“第 31 次和第 1 次”。我不知道我缺少哪行代码。如果您能帮我解决这个问题或告诉我如何最好地计算这个问题,我将非常感激。

PS:我搜索过其他类似的问题,但我解决的问题是完全不同的语言,而且我没有找到使用匿名格里高利计算算法来计算复活节日期的问题。

谢谢你。

python list algorithm date if-statement
2个回答
0
投票

您可以使用Python解释器轻松查看您的问题:

$ python3
>>> st = ['1', '21', '31']
>>> 21 in st
False
>>> '21' in st
True

字符串和数字是不同的东西。你计算一个数字,所以你的测试必须用数字。

$ python3
>>> st = [1, 21, 31]
>>> 21 in st
True

您应该使用集合而不是列表进行包含测试。在这种情况下,这没有多大区别,但这是一个好习惯,以防有很多值。


0
投票

这个怎么样?

if day in st:
    print(f"In {year}, Easter will fall on {'March' if month == 3 else 'April'} {str(day)}st")
elif day in nd:
    print(f"In {year}, Easter will fall on {'March' if month == 3 else 'April'} {str(day)}nd")
elif day in rd:
    print(f"In {year}, Easter will fall on {'March' if month == 3 else 'April'} {str(day)}rd")
else:
    print(f"In {year}, Easter will fall on {'March' if month == 3 else 'April'} {str(day)}th")
© www.soinside.com 2019 - 2024. All rights reserved.