#python #python_3x #datetime
Подскажите, пожалуйста, как правильно написать цикл для ввода даты, чтобы он предлагал
ввести значение из диапазона до тех пор, пока не будет введено это значение правильно.
import random
from datetime import datetime
start_date = datetime.strptime("01.01.2016", "%d.%m.%Y")
end_date = datetime.strptime("01.01.2019", "%d.%m.%Y")
x = random.randint(-30, 30)
while True:
prompt = "Input a date from the range [{:%d.%m.%Y} - {:%d.%m.%Y}]: ".format(start_date,
end_date)
try:
user_date = datetime.strptime(input(prompt), "%d.%m.%Y")
if start_date <= user_date <= end_date:
break
if user_date >= end_date or user_date <= start_date:
print("Please, select date from 01.01.2016 to 01.01.2019")
except ValueError:
print("Please enter a correct date")
print(f'User_date: {user_date:%d.%m.%Y}')
print("What a forecast do you want to see?")
print("1)Weather today")
print("2)Weather in 3 days")
print("3)Weather in 5 days")
print("4)Weather in 7 days")
while True:
a1 = int(input("Weather:\n>"))
try:
if a1 == 1:
if (start_date <= user_date <= end_date):
print(x)
break
if a1 == 2:
if (start_date <= user_date <= end_date):
print(x * 3)
break
if a1 == 3:
if (start_date <= user_date <= end_date):
print(x * 5)
break
if a1 == 4:
if (start_date <= user_date <= end_date):
print(x * 7)
break
if a1 < 1 or a1 > 4:
print("Please, select position from 1 to 4!")
break
except ValueError:
print("Please enter a correct number")
Ответы
Ответ 1
UPDATE: def inp_dt_from_range(start_date, end_date): while True: prompt = "Input a date from the range [{:%d.%m.%Y} - {:%d.%m.%Y}]: " \ .format(start_date, end_date) try: user_date = datetime.strptime(input(prompt), "%d.%m.%Y") if start_date <= user_date <= end_date: break except ValueError: pass return user_date def choose_int_option(text, prompt, options=[1,2,3]): print(text) while True: try: ret = int(input(prompt)) if ret in options: return ret except ValueError: pass text = """ What a forecast do you want to see? 1) Weather today 2) Weather in 3 days 3) Weather in 5 days 4) Weather in 7 days""" user_date = inp_dt_from_range(start_date, end_date) opt_range = list(range(1,5)) prompt = f'Input an integer from within a range: {opt_range}: ' opt = choose_int_option(text, prompt, opt_range) Пример: In [7]: user_date = inp_dt_from_range(start_date, end_date) ...: opt_range = list(range(1,5)) ...: prompt = f'Input an integer from within a range: {opt_range}: ' ...: opt = choose_int_option(text, prompt, opt_range) Input a date from the range [01.01.2016 - 01.01.2019]: asasa Input a date from the range [01.01.2016 - 01.01.2019]: 11.11.2018 What a forecast do you want to see? 1) Weather today 2) Weather in 3 days 3) Weather in 5 days 4) Weather in 7 days Input an integer from within a range: [1, 2, 3, 4]: qwq Input an integer from within a range: [1, 2, 3, 4]: 0 Input an integer from within a range: [1, 2, 3, 4]: 2 In [8]: print(f'user_date: {user_date:%d.%m.%Y}\topt: {opt}') user_date: 11.11.2018 opt: 2 Ответ на вопрос до редактирования: In [9]: while True: ...: prompt = "Input a date from the range [{:%d.%m.%Y} - {:%d.%m.%Y}]: " \ ...: .format(start_date, end_date) ...: ...: try: ...: user_date = datetime.strptime(input(prompt), "%d.%m.%Y") ...: if start_date <= user_date <= end_date: ...: break ...: except ValueError: ...: pass ...: ...: print(f'user_date: {user_date:%d.%m.%Y}') Вывод: Input a date from the range [01.01.2016 - 01.01.2019]: ababa Input a date from the range [01.01.2016 - 01.01.2019]: 01.15.2018 Input a date from the range [01.01.2016 - 01.01.2019]: 31.12.2018 user_date: 31.12.2018Ответ 2
import datetime start_date = datetime.datetime.strptime("01.01.2016", "%d.%m.%Y") end_date = datetime.datetime.strptime("01.01.2019", "%d.%m.%Y") user_date = datetime.datetime.strptime("01.01.2010", "%d.%m.%Y") # вне диапазона while not start_date < user_date < end_date: # или <= (как вам надо) user_date = datetime.datetime.strptime(input("Choose date: \n"), "%d.%m.%Y")
Комментариев нет:
Отправить комментарий