2017-09-01 152 views
1

我剛開始學習計算機科學,我對python 3和編碼一般都很陌生。我們的第一項任務是使用Zellers Concruence來計算一週中的某一天,並且關於我編寫的代碼我有幾個問題。使用Zeller的一致性的一週中的一天 - Python 3

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- 30。最後,我必須考慮閏年。我不知道如何編寫這些要求。

另外,所有的批評都是值得歡迎的。我知道這很不體面,所以請讓我知道我可以做得更好!

+0

對於「我應該確保日期範圍與正確的月份相關。」如果月份在[1,3,5,7,8,10,12]:valid_days = range(1,32)elif month in [4,6,9,11]:valid_days = range(1,31 ) – BoboDarph

+0

我會說只是通過這個:https://www.codecademy.com/learn/learn-python你正在尋找做什麼可能只是硬編碼 – sniperd

+0

要確定是否是閏年,你需要檢查是否年份可以被4整除,如果它可以被400整除,但不能被100整除。你可以這樣做:is_leap = year%4 == 0 and(year%100!= 0 or year%400 = = 0) – BoboDarph

回答

0

澤勒的一致性正確地處理了閏年。如果你的問題是確保輸入日期是有效的,我相信最簡單的方法是使用用戶輸入創建一個python datetime.date對象。

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

如果有任何無效輸入,python會引發一個有意義的異常。你不需要自己做任何驗證,只要讀取它們就足夠了。

相關問題