1

これはおそらく非常に単純ですが、私は Python の初心者であり、ユーザーに MM-DD 形式で日付を入力するように求めることで、誕生日の日付を比較したいと考えていました。年は現在の年 (2011 年) であるため、年はありません。次に、ユーザーに別の日付を入力するように求めるプロンプトが表示され、プログラムはそれを比較してどちらが最初かを確認します。次に、前日と曜日名を出力します。

例: 02-10 は 03-11 より前です。02-10 は木曜日、03-11 は金曜日です。

モジュールの学習を開始したばかりで、datetime モジュール、日付クラス、および strftime を使用して曜日名を取得する必要があることを知っています。まとめ方がよくわからない。

誰かが私が始めるのを手伝ってくれるなら、それは本当に助けになるでしょう! 私はいくつかの断片を一緒に持っています:

 import datetime  

 def getDate():  

     while true:  
         birthday1 = raw_input("Please enter your birthday (MM-DD): ")  
         try:  
             userInput = datetime.date.strftime(birthday1, "%m-%d")  
         except:  
             print "Please enter a date"  
     return userInput

     birthday2 = raw_input("Please enter another date (MM-DD): ")

        if birthday1 > birthday2:  
            print "birthday1 is older"  
        elif birthday1 < birthday2:  
            print "birthday2 is older"  
        else:  
            print "same age"  
4

3 に答える 3

4

あなたが投稿したコードで私が見ることができるいくつかの問題があります。これらのいくつかを指摘し、いくらか書き直されたバージョンを提供することが役立つことを願っています。

  • インデントが壊れていますが、これはスタックオーバーフローに貼り付ける際の問題である可能性があります
  • strftime時間をフォーマットするためのものであり、解析するためのものではありません。strptime代わりに必要です。
  • PythonではTrue、大文字がありTます。
  • 関数を定義していgetDateますが、使用することはありません。
  • 入力を正常に取得した後でwhileはないため、ループを終了することはありません。break
  • Pythonで変数名とメソッド名に「キャメルケース」を使用するのは悪いスタイルと見なされます。
  • あなたは日付を参照して「古い」という言葉を使用しますが、年がなければ、一方の人がもう一方の人よりも年上であるかどうかを判断することはできません。
  • 日付を解析しようとしたときにスローされた例外をキャッチしますが、それを表示したり、そのタイプを確認したりしないでください。その行に変数名(または同様のタイプミス)を誤って入力した場合、エラーは表示されないため、これは悪い考えです。

これらの問題を修正するコードの書き直されたバージョンは次のとおりです-上記から、なぜこれらの変更を行ったのかが明確になることを願っています。

import datetime  

def get_date(prompt):
    while True:
        user_input = raw_input(prompt)  
        try:  
            user_date = datetime.datetime.strptime(user_input, "%m-%d")
            break
        except Exception as e:
            print "There was an error:", e
            print "Please enter a date"
    return user_date.date()

birthday = get_date("Please enter your birthday (MM-DD): ")
another_date = get_date("Please enter another date (MM-DD): ")

if birthday > another_date:
    print "The birthday is after the other date"
elif birthday < another_date:
    print "The birthday is before the other date"
else:  
    print "Both dates are the same"
于 2011-03-13T09:03:57.593 に答える
1

さて、datetime.date.strftime には、文字列ではなく datetime オブジェクトが必要です。

あなたの場合、最善の方法は手動で日付を作成することです:

import datetime
...
birthday1 = raw_input("Please enter your birthday (MM-DD): ")
try:
  month, day = birthday1.split('-')
  date1 = datetime.date(2011, int(month), int(day))
except ValueError as e:
  # except clause
# the same with date2

そして、date1 と date2 の 2 つの日付がある場合は、次のようにするだけです。

if d1 < d2:
  # do things to d1, it's earlier
else:
  # do things to d2, it'2 not later
于 2011-03-13T08:52:07.597 に答える
1

日付オブジェクトと文字列の間の変換に使用される 2 つの主な関数があります:strftimestrptime.

strftime は書式設定に使用されます。文字列オブジェクトを返します。strptime は解析に使用されます。日時オブジェクトを返します。

詳しくはドキュメントをご覧ください。

必要なのは日時オブジェクトなので、strptime を使用する必要があります。次のように使用できます。


>>> datetime.datetime.strptime('01-23', '%m-%d')
datetime.datetime(1900, 1, 23, 0, 0)

年を解析しないと、デフォルトが 1900 に設定されることに注意してください。

于 2011-03-13T08:56:15.153 に答える