Python只执行一个if语句

时间:2015-10-27 04:06:59

标签: python if-statement

我非常擅长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)

2 个答案:

答案 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)命令正在执行。请重新审视您的逻辑。我认为你应该使用模数而不是减法。