比较字符串中的int

2024-03-29 15:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写代码,因为我想比较if语句中字符串中的int值,看看该值是否等于或大于。你知道吗

当我尝试这个:

for prog_clock, prog_length, pos_X, prog_ids in izip_longest(program_clock, programs_length, posX, progId, fillvalue=''):
    epg_time_1 = self.getControl(344).getLabel()
    epg_time_2 = self.getControl(345).getLabel()
    epg_time_3 = self.getControl(346).getLabel()


    if int(pos_X) == 375:
       for program_id, program_length, program_minutes in zip(prog_id_list, programs_length, program_remaining):

           if epg_time_2 == prog_clock:
              print "WORKING 1"

           elif prog_clock > epg_time_1 and epg_time_2 > prog_clock:
              print "WORKING 2"


           elif epg_time_3 == prog_clock:
              print "WORKING 3"


           elif epg_time_3 < prog_clock:
               print "WORKING 4"

prog_clock的输出:

21:41:45 T:5796  NOTICE: 11:00PM
21:41:45 T:5796  NOTICE: 10:00PM
21:41:45 T:5796  NOTICE: 10:00PM
21:41:45 T:5796  NOTICE: 10:45PM
21:41:45 T:5796  NOTICE: 11:05PM
21:41:45 T:5796  NOTICE: 10:00PM
21:41:45 T:5796  NOTICE: 10:00PM

epg\ U time\ U 1的输出:

9:30PM

epg\u时间\u 2的输出:

10:00PM

epg\u时间\u 3的输出:

10:30PM

我想将对象字符串中的三个字符串与prog_clock字符串中的每个字符串进行比较,看看我能为电视节目中的每个字符串获得pass的if语句。当我试图比较它们时,它不会让我忽略这些if语句。那么我如何比较字符串中的int值来判断值是否等于或大于?你知道吗


Tags: 字符串selfiftime语句programlengthworking
3条回答

如果字符串是相同的,那么直接比较它们就可以了

string1 = '10:00PM'
string2 = '11:00PM'

print(string2 > string1)

print(string1 > string2)

输出

True
False

编辑:在阅读了评论之后,我决定编辑我的答案并发布一个带有time.strptime的解决方案

from time import strptime

format = '%I:%M%p' # format to striptime

epg_time_1 = strptime('9:30PM', format)
epg_time_2 = strptime('10:10PM', format)
epg_time_3 = strptime('10:30PM', format)


prog_clock = strptime('10:00PM', format)

if epg_time_2 == prog_clock:
    print("WORKING 1")

elif prog_clock > epg_time_1 and epg_time_2 > prog_clock:
    print("WORKING 2")


elif epg_time_3 == prog_clock:
    print("WORKING 3")


elif epg_time_3 < prog_clock:
    print("WORKING 4")

输出"WORKING 2"

好的,对于每一行,你可以从下面应用函数parseLine(str)。我所做的基本上是:

对于给定的行(例如:21:41:45 T:5796 NOTICE: 10:00PM)I

  1. 获取第一个时间戳,我们知道它的格式是HH:MM:SS
  2. 获取第二个时间戳,我们知道它的格式是HH:MM(AM/PM)
  3. 将两者转换为时间对象(请参见here
  4. 比较

当然,您可以根据行的格式调整格式(以防您决定更改它)。重要的是正确地转换时间戳,因为第一个时间戳使用24小时格式,而第二个时间戳使用12小时格式(我使用%I将第二个时间戳的小时部分转换为24小时格式,以便我们可以轻松地比较两者)。比较本身是由Python和支持它的time对象完成的。我还假设两个时间戳都使用空格作为中间子字符串的分隔符,但是如果第一个时间戳由制表符分隔,则可以将split()的分隔符选项从' '更改为'\t'。你知道吗

from datetime import datetime

def parseLine(line):
  # Use split() and rsplit() to get the stamps
  # Extract the first timestamp - it is separated from the rest by the first space in your string
  first_tstamp = line.split(' ', 1)[0]
  # Extract the second timestamp - it is separated from the rest by the last space in your string
  last_tstamp = line.rsplit(' ', 1)[1]

  # Parse the string representations of both stamps to a time object
  t_first = datetime.strptime(first_tstamp, "%H:%M:%S").time()  # Format: HH:MM:SS
  t_second = datetime.strptime(last_tstamp, "%I:%M%p").time() # Format: HH:MM(PM/AM)

  print("FIRST",t_first)
  print("SECOND",t_second)

  if(t_first > t_second): return 1
  elif(t_first < t_second): return -1
  else: return 0

def test(line):
  res = parseLine(line)

  if(res > 0): print("FIRST later than LAST")
  elif(res < 0): print("FIRST earlier than LAST")
  else: print("FIRST same as LAST")

print("    Test 1    ")
# First is earlier than second  
test("21:41:45 T:5796 NOTICE: 11:00PM")
print("    Test 2    ")
# First is later than second
test("12:05:30 T:5796 NOTICE: 10:00AM")
print("    Test 3    ")
# First is same as second
test("23:00:00 T:5796 NOTICE: 11:00PM")

实际上,有多种解决方案,这可能不是最好的一个,但它确实做到了。我在最后做的测试的输出是:

FIRST earlier than LAST # Because 21 is less than 11PM (=23)
FIRST later than LAST   # Because 12 is greater than 10AM (=10)
FIRST same as LAST      # Because 23 is the same as 11PM (=23)

对于prog_clock,从字符串中提取时间组件,使用datetime.strptime()解析它并将其转换为datetime.time对象。现在你可以直接比较时间了。只需添加四行即可解析输入,如下所示:

from datetime import datetime

for prog_clock, prog_length, pos_X, prog_ids in izip_longest(program_clock, programs_length, posX, progId, fillvalue=''):
    epg_time_1 = self.getControl(344).getLabel()
    epg_time_2 = self.getControl(345).getLabel()
    epg_time_3 = self.getControl(346).getLabel()

    # parse time data into datetime.time objects for comparison
    prog_clock = datetime.strptime(prog_clock.split()[-1], '%I:%M%p').time()
    epg_time_1 = datetime.strptime(epg_time_1, '%I:%M%p').time()
    epg_time_2 = datetime.strptime(epg_time_2, '%I:%M%p').time()
    epg_time_2 = datetime.strptime(epg_time_3, '%I:%M%p').time()

    ...

实际上,转换为datetime.time对象是可选的—如果忽略它,datetime.datetime值都将具有相同的日期(1900-01-01),并且时间比较仍然有效。你知道吗

相关问题 更多 >