2016-03-20 22 views
-4

私の中期プロジェクトの1つは日付(月と日)を(閏年を含む1〜366)日の曜日に変換することですが、これを行う方法がわかりません。私はそれを働かせる方法を知らないし、また、あなたは有効な月だけを置くことができるようにそれを作る方法も知らない(例えば、エラー、1月を大文字にしてください)Python:日付から日への変換

以下は私が持っているものですこれまでに行われた。

#Months 
January=0 
February=31 
March=60 
April=91 
May=121 
June=152 
July=182 
August=213 
September=244 
October=274 
November=305 
December=335 

#Title 
print("Convert: Date to day and day to date.") 

#user inputs a date 
month=input("\nPick a Month (Make sure to capitalize the first letter): ") 

day=int(input("Pick the day of the date you wish to input: ")) 
if day<0 or day>31: 
    print("Error, no months have greater than 31 days or less than 1 day.") 

助けてください。私はここ数日間はこれについて取り組んできましたが、それをどうやって行うのかまだ分かりません。

+1

ユーザーは、それが第三百六十五または第三百六十六日だ場合、どのように教えていますか?12月31日を置く場合プログラムはうるう年にのみ実行されますか? – Knells

+1

ヒントのいくつか - あなたの変数の代わりに辞書を使う.. months = {'January':0、....} ..あなたの入力を受け取り、その値がキーと一致するかどうかチェックし、もしそうなら、辞書に追加して日数を追加すると、簡単な作業ソリューションが得られます。追加の検証でどのように改善できるか考えてください。 – AK47

+1

'datetime'のような標準ライブラリを使用できますか?はい、私は非常にあなたがこの投稿を見てお勧めhttp://stackoverflow.com/questions/620305/convert-year-month-day-to-day-of-year-in-python – mmenschig

答えて

0

私はPythonでそれほど経験がありませんので、これが魅力的に機能するとは思っておらず、改善の余地があると思います。しかし、私はこれを自分のコンピュータで試してみましたが、うまくいきました。私はこのコードをより効率的にし、後でそれを投稿しようとします。

このコードが目的に適しているかどうかはわかりませんが、私があなたに与えたものを使用しました。

年を入力して年または閏年を探しているかどうかを確認することもできますが、欲しいのかどうかわかりません今。このコードでは、希望する月に入力することができます。

あなたは、単に入力した日付は次のようになり今年に日数を印刷したい場合は、その後、あなたは(このプログラムは、同様に不正解に出る。)は、次のようなものを試してみたいことがあります。

#Months 
#January=0 
#February=31 
#March=60 
#April=91 
#May=121 
#June=152 
#July=182 
#August=213 
#September=244 
#October=274 
#November=305 
#December=335 

monthvalue = -1 

#Title 
print("Convert: Date to day and day to date.") 

#user inputs a date 
month = input("\nPick a Month (Make sure to capitalize the first letter): ") 
month = month.lower() 
month = month[:1].capitalize() + month[1:] 

if(month=="January"): 
    monthvalue = 0 

if(month=="February"): 
    monthvalue = 31 

if(month=="March"): 
    monthvalue = 60 

if(month=="April"): 
    monthvalue = 91 

if(month=="May"): 
    monthvalue = 121 

if(month=="June"): 
    monthvalue = 152 

if(month=="July"): 
    monthvalue = 182 

if(month=="August"): 
    monthvalue = 213 

if(month=="September"): 
    monthvalue = 244 

if(month=="October"): 
    monthvalue = 274 

if(month=="November"): 
    monthvalue = 305 

if(month=="December"): 
    monthvalue = 335 

if(monthvalue<0): 
    print("Error, you have not entered a valid month.") 
    xwdwa=input("\nPress any key to continue...") 
    exit(0) 

day=int(input("Pick the day of the date you wish to input: ")) 
if day<1 or day>31: 
    print("Error, no months have greater than 31 days or less than 1 day.") 

total = monthvalue + day 

print("Your date is ", total, " days into a leap year.") 
exitvar = input("Press any key to continue.") 
+0

誰かが編集したい場合これをより効率的にし、うるう年が存在するかどうかを判断できるようにしてください。大変感謝しています。また、日の決定に問題があるかもしれません... –

+0

私が間違っている場合は、驚かないでください。 –

+0

ありがとうございました!まさに私が望んでいたもの。 – Anonymous

0

私はこのプログラムが何を生産しているのか分かりませんし、どこに月が使われているのかわかりません。あなたの質問は、ユーザー入力の最初の文字を大文字にしたり、あなたのプログラムがそれを期待されている場合でも、それを持っていることを確認する方法である場合は、試してみてください。

month = raw_input("\nPick a Month (Make sure to capitalize the first letter): ") 
month = month[:1].capitalize() + month[1:] 

月の最初の文字が大文字になります。

1

コード:

_DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 

def _is_leap(year): 
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) 

def _days_in_month(year, month): 
    if month == 2 and _is_leap(year): 
     return 29 
    return _DAYS_IN_MONTH[month] 

def days(year, month, day): 
    return sum([_days_in_month(year, m) for m in range(0, month)]) + day 

d = days(1992, 4, 14) 
print(d) 

出力:

132 

この簡単にいくつかの簡単な関数を作成することによって行われます。

  1. 月に日の各番号のlistを作成します。
  2. うるう年かどうかを確認する関数を作成します。
  3. うるう年または普通の年のその月の日数を伝えるために、今まで作成したis_leapyear関数を利用する関数を作成します。
  4. その月と日までに経過した日数を示す関数を作成します。それは次のように機能します。
    • その月までの各日のリストを返すリスト内包表記を作成します。
    • 前月のすべての日の合計に、その月の経過日数を加算します。
関連する問題