Я чрезвычайно новичок в Python и программировании в целом, и я работаю над этой конкретной проблемой около четырех часов. Я пытаюсь преобразовать время (например, 12:30) в нечто, пригодное для использования в выражении "if". Вот что я пробовал до сих пор:
time = input("Enter the time the call starts in 24-hour notation:\n").split(":")
if time >= 8:30 and time <= 18:00:
print("YES")
При попытке выполнить это, я получаю недопустимую синтаксическую ошибку. Когда я пытаюсь преобразовать время в целое число [callTime = int(time)]
, я получаю сообщение об ошибке:
Аргумент int() должен быть строкой
Это всего лишь часть всей проблемы, над которой я работаю, но я думаю, что могу разобраться в остальном, если я могу просто спрыгнуть с этой проблемы. Хотя я не верю, что мне разрешено использовать datetime для этой конкретной проблемы; все могло бы помочь.
EDIT: Исправлено int (время)
8:30
не является допустимым типом данных. Преобразуйте его как целое, чтобы заставить его работать (8:30 = 8 часов и 30 минут = 8 * 60 + 30 минут)
>>> time = input("Enter the time the call starts in 24-hour notation:\n").split(":")
Enter the time the call starts in 24-hour notation:
12:30
>>> time
['12', '30'] # list of str
>>> time = [int(i) for i in time] # will raise an exception if str cannot be converted to int
>>> time
[12, 30] # list of int
>>> 60*time[0] + time[1] # time in minutes
750
>>>
Чтобы получить это за секунды, например, 12:30:58
, сделайте то же самое с time_in_sec = time[0] * 3600 + time[1] * 60 + time[2]
в последней строке.
Благодаря свойствам modulo он гарантировал, что только одно "реальное" время соответствует часу, преобразованному как целое.
Для вашей проблемы создайте функцию to_integer(time_as_list)
возвращающую int, а затем сравните запись пользователя с to_integer('18:00'.split(':'))
и to_integer('8:30'.split(':'))
Работа со временем вручную не является тривиальной. Я предлагаю вам использовать модуль datetime
который поддерживает преобразование времени, сравнение и т.д.
from datetime import datetime as dt
t = input("...")
t_object = dt.strptime(t, "%H:%M")
if t_object >= dt.strptime("8:30", "%H:%M") and \
t_object <= dt.strptime("18:00", "%H:%M"):
do_your_stuff()
Мое решение проблемы (без datetime
):
answer = input("Enter the time the call starts in 24-hour notation:\n")
t = tuple(int(i) for i in answer.split(':'))
if (8, 30) <= t <= (18, 0):
print("YES")
Вы используете двоеточие, где Python ожидает число или имя переменной. В этом утверждении: if time >= 8:30 and time <= 18:00:
вам нужно поместить значения времени в кавычки ("8:30"
), так как они не численные. Затем, однако, вы столкнетесь с проблемой сравнения двух нечисловых значений с вашими операторами >=
и <=
. Сравнение работает только с фактическими значениями, а двоеточие делает значение в строке вместо int или float. Лучше было бы преобразовать время в целое число, разделив двоеточие на сравнения и другие манипуляции, затем вы можете добавить двоеточие назад по необходимости.