使用Zeller的同余 - Python 3的星期几

时间:2017-09-01 14:07:19

标签: python

我刚开始学习计算机科学,我对python 3和编码很新。我们的第一个任务是使用Zellers Congruence计算星期几,我对我编写的代码有几个问题。

year = int(input("Year: "))
while not int(year) in range(1583, 10000):
    year = input("Out of allowed range 1583 - 9999. Please enter a valid 
number: ")

month = int(input("Month: "))
while not int(month) in range(1, 13):
 month = input("Out of allowed range 1 - 12. Please enter a valid number: ")

if month == 1 or month == 2:
 month += 12
 year -= 1 

day = int(input("Day: "))
while not int(day) in range(1, 32):
        day = input("Out of allowed range 1 - 31. Please enter a valid 
number: ")


result = ( day + 13 * (month+1) // 5 + year + year // 4
 - year// 100 + year // 400 ) % 7


weekday = {0: "Saturday",1: "Sunday", 2: "Monday",3: "Tuesday",4: 
"Wednesday",5: "Thursday",6: "Friday"}

print("The day is " + weekday[int(result)] + ".")

首先,我应该确保日期范围与正确的月份相关。例如,当月份输入为1,3,5,7,8,10或12时,日间隔应为1 - 31.如果月份输入为4,6,9或11,则日间隔应为1 - 1 30。最后我还要考虑闰年。我无法弄清楚如何编写这些要求。

此外,欢迎所有批评。我知道这远远不够,所以请让我知道我能做得更好!

1 个答案:

答案 0 :(得分:0)

泽勒的同意正确处理闰年。如果你的问题是确保输入日期是有效的,我相信最简单的方法是使用用户输入创建一个python datetime.date对象。

import datetime
... # get user inputs
date = datetime.date(year, month, day)

如果有任何无效输入,python将引发一个有意义的异常。您不需要自己进行任何验证,只需将它们作为整数读取即可。