2017-09-01 2 views
1

私はちょうどコンピュータサイエンスの勉強を始めました。私はPython 3と一般的なコーディングにはとても新しいです。私たちの最初の任務は、Zellers Congruenceを使って曜日を計算することです。私が書いたコードに関していくつか質問があります。Zeller's Congruenceを使用している曜日 - 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日の間隔は1〜31でなければなりません。月の入力が4,6,9、または11の場合、1日の間隔は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では割り切れない場合は、次のように1ライナーで指定できます:is_leap = year%4 == 0 and(year%100!= 0またはyear%400 = = 0) – BoboDarph

答えて

0

Zellerの合同は、うるう年を正しく処理します。あなたの問題が入力日付が有効なものであることを確認しているなら、最も簡単な方法は、ユーザ入力を使ってPython datetime.dateオブジェクトを作成することです。

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

無効な入力があった場合、Pythonは意味の例外が発生します。あなたは自分で検証する必要はありませんが、整数で十分です。

関連する問題