Сравнение два раза и возврат переменной на основе сравнения - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть программа, которая берет время отправления поезда с веб-сайта, обрабатывает их и отображает в новом окне.Теперь я хотел бы добавить функцию, которая меняет цвет отображаемого времени.Я делаю это с помощью следующего кода: (res & res2 - время отправления)

t1 = time(0,1,0)
t2 = time(0,2,0)
def color():
    f = get_resp()
    g = f[1]
    res = g[0]
    res2 = str(res)

    if res2 < t1:
        return  "red"
    elif res2 < t2:
        return  "orange"
    elif res2 > t2:
        return "green"

Теперь моя проблема в том, что этот код всегда возвращает «зеленый», независимо от времени.Я попытался преобразовать оба раза в строки и затем сравнить их, я попытался преобразовать оба в дату и время и сравнить их, и я попытался выбрать только минуты и сравнить те, которые не работали, потому что res этоtimedelta.

Я предполагаю, что это из-за различных форматов res и t1 / t2

res: 0: 07: 04

t1: 00:01:00

Это ссылка на файл .py всего моего кода https://drive.google.com/file/d/1NK4bYgstWKumRI95AD1nP9sHRTfEhXnj/view?usp=sharing

1 Ответ

0 голосов
/ 15 ноября 2018

Следующее преобразует все ваше время в datetime.timedelta объекты.Тогда сравнения будут работать, чтобы вернуть разные цвета.Вот пример кода:

from datetime import datetime, timedelta, time

def to_timedelta(t):
  t_dt = datetime.strptime(str(t),"%H:%M:%S")
  t_delta = timedelta(hours=t_dt.hour,
                      minutes=t_dt.minute,
                      seconds=t_dt.second)
  return t_delta

def color():
  # Modified variable names to use the timedelta variables
  if res_td < t1_td:
    return  "red"
  elif res_td < t2_td:
    return  "orange"
  elif res_td > t2_td:
    return "green"

t1 = time(0,1,0)
t2 = time(0,2,0)

t1_td = to_timedelta(t1)
t2_td = to_timedelta(t2)

# This returns "red"
res = time(0,0,4)
res_td = to_timedelta(res)
color1 = color()
print color1

# This returns "orange"
res = time(0,1,0)
res_td = to_timedelta(res)
color2 = color()
print color2

# This returns "green"
res = time(0,7,4)
res_td = to_timedelta(res)
color3 = color()
print color3

Другой замечательный вариант - pandas, который позволяет легко преобразовывать в timedelta и сравнивать объекты timedelta.После установки панд (pip install pandas) будет работать следующее (также используется функция color() сверху):

import pandas as pd

def to_timedelta_pd(t):
  # Return pandas timedelta from passed datetime.time object
  t_delta = pd.to_timedelta(str(t))
  return t_delta

t1 = time(0,1,0)
t2 = time(0,2,0)

t1_td = to_timedelta_pd(t1)
t2_td = to_timedelta_pd(t2)

# This returns "red"
res = time(0,0,4)
res_td = to_timedelta_pd(res)
color1 = color()
print color1

# This returns "orange"
res = time(0,1,0)
res_td = to_timedelta_pd(res)
color2 = color()
print color2

# This returns "green"
res = time(0,7,4)
res_td = to_timedelta_pd(res)
color3 = color()
print color3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...