#python #python-3.x #datetime #if-statement #format
#python #python-3.x #дата и время #if-оператор #формат
Вопрос:
Я создал функцию в формате: день / месяц / год. Я хотел бы создать другую функцию, которая, например, запрашивает пользователя: «Когда ты хочешь прийти?» и в зависимости от того, в каком месяце пользователь скажет, что я хочу распечатать ответ.
Проблема: я не знаю, как создать функцию, которая запрашивает у пользователя формат: день / месяц / год без ограничения лет, я бы хотел, чтобы пользователь вводил любой год и при этом мог получать те же ответы, что и в другом году (но в другом месяце).
enter code here
import datetime
def dateformat(date):
return datetime.datetime.strptime(datumet, "%d/%m/%Y")
def ask_user():
winter = dateformat('1/1/2020') <= dateformat('31/3/2020')
spring = dateformat('1/4/2020') <= dateformat('31/5/2021')
summer = dateformat('1/6/2020') <= dateformat('31/9/2021')
autumn = dateformat('1/10/2020') <= dateformat('31/12/2021')
a = dateformat(input("When do you want to come"))
if a == winter:
print("Hi")
if a == spring:
print("bye")
if a == summer:
print("ok")
if a == autumn:
print("no")
Мой вопрос: как я могу заставить этот код работать в течение любого года? Я хотел бы иметь возможность вводить любой год, но внутри месяца, и получать тот же результат. Если я верну только %d /%m в dateformat-функции, пользователь не сможет ввести: день / месяц / год. Может быть, есть лучший способ вернуть формат?
Комментарии:
1. Из входных данных вы можете просто извлечь день и месяц. Это позволит пользователю вводить любой год. Тогда это
If I only return %d/%m in the dateformat-function the user will not be able to type: day/month/year
не будет проблемой. Сезон не зависит от года.2. @macOS что вы имеете в виду? Как я могу сделать зиму всех мотыльков, которые у меня были, не заботясь о том, в каком году?
3. Я не думаю, что ваш код делает то, что вы ожидаете от него. Во-первых,
31/9/2021
это не фактическая дата, поэтомуdateformat
будет выдана ошибка.winter
Во-вторых,spring
, и т.д. являются логическими значениями. По сути, вы сравниваете дату с логическим значением, поэтому они никогда не будут равны, и вы не получите никаких выходных данных.4. @PranavHosangadi У вас есть пример? Я понимаю, что вы имеете в виду.
5. @PranavHosangadi Как я могу сделать зиму, например: 01/12<= 31/3, но заставить пользователя также вводить год?
Ответ №1:
Я не думаю, что ваш код делает то, что вы ожидаете от него. Во-первых, 31/9/2021
это не фактическая дата, поэтому dateformat
будет выдана ошибка. Во-вторых, dateformat('1/1/2020') <= dateformat('31/3/2020')
проверяет, является ли первая дата меньше или равна второй, поэтому winter
, spring
, и т.д. являются логическими значениями (и все ). True
При a == winter
этом вы сравниваете дату с логическим значением, поэтому они никогда не будут равны, и вы не получите никаких выходных данных.
Что вы на самом деле хотите сделать, это прочитать в date и посмотреть, находится ли его month
атрибут между определенными пределами, потому что значение a.year
не влияет на сезон. Итак:
datumet = input("When do you want to come? ")
a = datetime.datetime.strptime(datumet, "%d/%m/%Y")
if a.month <= 3:
print("Hi, you're coming in winter")
elif a.month <= 5:
print("Spring")
elif a.month <= 9:
print("Summer")
else:
print("Autumn")
То же самое относится, когда ваши диапазоны не заканчиваются в конце года. Например, если зима длилась с начала ноября до конца февраля,
if a.month >= 11 or a.month <= 2:
print("Hi, you're coming in winter")
elif a.month <= 5:
print("Spring")
elif a.month <= 9:
print("Summer")
else:
print("Autumn")
Комментарии:
1. @Карл-ЭрикПеттерссон i.stack.imgur.com/wwPXM.png Не могли бы вы поподробнее? Для меня это работает отлично.
2. Извините! Я набрал неправильно! Но я заметил одну вещь: код не будет работать с циклами for, я создал список с числами и хотел бы, чтобы все это распечатывалось при вызове определенного месяца, но это не сработало. Это дало мне только первый элемент в списке
3. Я могу показать вам, что я имею в виду, отредактировав свой первоначальный вопрос, проверьте его, пожалуйста
![]()
4. Сделайте это. Я не уверен, что вы имеете в виду, поэтому просмотр вашего кода поможет.
5. неважно, что я снова написал неправильно! Еще раз спасибо, сэр!! :)))