Попытка преобразовать время в целое число в Python 3

1

Я чрезвычайно новичок в 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 (время)

  • 0
    Используя синтаксис Python, callTime = (int) time должно быть callTime = int (time). Однако вы не можете просто преобразовать строку, представляющую время, в int, используя функцию int. Просмотрите docs.python.org/3/library/time.html для анализа времени в целочисленных метках времени.
Теги:
python-3.x
datetime

4 ответа

1
Лучший ответ

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(':'))

1

Работа со временем вручную не является тривиальной. Я предлагаю вам использовать модуль 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()
  • 0
    > Я не верю, что мне разрешено использовать дату и время для решения этой конкретной проблемы
  • 1
    Ты никогда не говорил, что это твое задание.
Показать ещё 2 комментария
0

Мое решение проблемы (без 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")
0

Вы используете двоеточие, где Python ожидает число или имя переменной. В этом утверждении: if time >= 8:30 and time <= 18:00: вам нужно поместить значения времени в кавычки ("8:30"), так как они не численные. Затем, однако, вы столкнетесь с проблемой сравнения двух нечисловых значений с вашими операторами >= и <=. Сравнение работает только с фактическими значениями, а двоеточие делает значение в строке вместо int или float. Лучше было бы преобразовать время в целое число, разделив двоеточие на сравнения и другие манипуляции, затем вы можете добавить двоеточие назад по необходимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню