我非常擅长python和编程,所以请原谅,如果答案很明显的话。 我正在尝试编写一个程序,它将告诉你复活节在一段时间里会发生什么。 我的if语句遇到了问题。如果年份是第一个if语句中指定的年份之一,即使日期> 1,它也不会执行第二个if语句。 31.
year = int(input('Input a year: '))
a = year % 19
b = year % 4
c = year % 7
d = (19 * a + 24) % 30
e = (2 * b + 4 * c + 6 * d + 5) % 7
day = 22 + d + e
month = 'March'
if year == 1954 or year == 1981 or year == 2049 or year == 2076:
day = day + 7
if day > 31:
day = day - 31
month = 'April'
print('Easter is on', month, day)
答案 0 :(得分:2)
正在执行第二个if语句。
您是否考虑过day
会有多大?
例如,如果year == 2049
,那么:
a = 16
b = 1
c = 5
d = 28
e = 6
这导致初始分配到day = 22+d+e
天以设置day = 56
。在第一个if中,然后将其设置为63
63-31 = 32,这是你得到的? (以及作为月份的'四月',表明它一直到达if语句)
所以也许你误解了用于确定复活节日期的算法而没有正确实现它。
答案 1 :(得分:1)
我相信问题出在你的逻辑中。我稍微修改了一下代码,发现第二个IF正在工作
year = int(input('Input a year: '))
a = year % 19
b = year % 4
c = year % 7
d = (19 * a + 24) % 30
e = (2 * b + 4 * c + 6 * d + 5) % 7
day = 22 + d + e
month = 'March'
if year == 1954 or year == 1981 or year == 2049 or year == 2076:
day = day + 7
if day > 31:
print("day ", day)
day = day - 31
month = 'April'
print('Easter is on', month, day)
给出输出:
Input a year: 1954
day 63
Easter is on April 32
如果看到结果,print("day ", day)
命令正在执行。请重新审视您的逻辑。我认为你应该使用模数而不是减法。