Это, вероятно, очень просто, но я начинающий в 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"
В коде, который вы опубликовали, есть несколько проблем. Я надеюсь, что будет полезно указать некоторые из них и предоставить несколько переписанную версию:
strftime
предназначен для форматирования, а не для их разбора. Вы хотите strptime
вместо этого.True
имеет капитал T
.getDate
, но никогда не используете ее.while
, так как вы не break
после успешного ввода.Здесь приведена перезаписанная версия вашего кода, которая устраняет эти проблемы. Надеюсь, что из сказанного я объясню, почему я сделал эти изменения:
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"
Существуют две основные функции, которые используются для преобразования между объектом даты и строкой: strftime
и strptime
.
strftime используется для форматирования. Он возвращает строковый объект. strptime используется для разбора. Он возвращает объект datetime.
Дополнительная информация в документах.
Поскольку вам нужен объект datetime, вы бы хотели использовать strptime. Вы можете использовать его следующим образом:
>>> datetime.datetime.strptime('01-23', '%m-%d')
datetime.datetime(1900, 1, 23, 0, 0)
Обратите внимание, что при отсутствии синтаксического анализа по умолчанию значение по умолчанию будет равным 1900.
Ну, 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 earlier
else:
# do things to d2, it'2 not later
try
только один раз? Ты читаешь две даты. Я не очень понимаю ваши шаги. Сначала вы должны прочитать хороший учебник по Python. docs.python.org/tutorial/index.html