Возвращает даты в другом формате в python

#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. неважно, что я снова написал неправильно! Еще раз спасибо, сэр!! :)))