Python: сравнение дат и распечатка первой - PullRequest
1 голос
/ 13 марта 2011

Это, вероятно, очень просто, но я новичок в 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"  

Ответы [ 3 ]

4 голосов
/ 13 марта 2011

В коде, который вы разместили, я вижу несколько проблем.Я надеюсь, что будет полезно указать некоторые из них и предоставить несколько переписанную версию:

  • Отступы повреждены, но я думаю, что это могут быть просто проблемы при вставке в переполнение стека
  • strftime - для форматирования раз, а не для их анализа.Вместо этого вы хотите strptime.
  • В Python True имеет заглавную T.
  • Вы определяете функцию getDate, но никогда не используетеit.
  • Вы никогда не выйдете из цикла 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"
1 голос
/ 13 марта 2011

Для преобразования между объектом даты и строкой используются две основные функции: strftime и strptime.

strftime используется для форматирования. Возвращает строковый объект. strptime используется для разбора. Возвращает объект datetime.

Подробнее в документах .

Так как вам нужен объект datetime, вы можете использовать strptime. Вы можете использовать его следующим образом:


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

Обратите внимание, что если не анализировать год, будет установлено значение по умолчанию 1900.

1 голос
/ 13 марта 2011

Ну, 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

А затем, когда у вас есть двадаты, дата1 и дата2, вы можете просто сделать:

if d1 < d2:
  # do things to d1, it's earlier
else:
  # do things to d2, it'2 not later
...