繁体   English   中英

在满足条件后停止检查语句

[英]stop checking if statement after condition is met

我有以下程序可以运行400秒,并且在while循环中,它会在一组时间码上进行迭代。 当程序的运行时间与时间码之一相同时,它将执行某些操作。 问题在于,它每秒每秒多次遍历时间码数组,而当前它在满足条件的那一秒内多次“执行操作” –我只希望它执行一次操作...我该如何做做这个?

#!/usr/bin/env python3

import time

def get_sec(s):
    l = s.split(':')
    return int(l[0]) * 60 + int(l[1])

def sec_trim(s):
    l = s.split('.')
    return int(l[0])

times = [
    '00:07',
    '00:34',
    '00:59',
    '01:29',
    '02:22',
    '02:50',
    '03:05',
    '03:21',
    '04:07',
    '04:24',
    '04:58',
    '05:27',
    '06:03',
    '06:22',
    '06:36',
    '06:58',
    '07:07',
    '07:24',
    '07:45',
    '08:40',
    '08:51',
    '09:17',
    '09:31',
    '09:43',
    '10:01',
    '10:10',
    '10:30',
    '11:29',
    '11:42',
    '12:02',
    '12:14',
    '12:26',
    '12:51',
    '13:47',
    '13:58',
    '14:09',
    '14:33'
]



start_time = time.time()
elapsed_time = time.time() - start_time

while elapsed_time < 400:
    for item in times:
        elapsed_time = time.time() - start_time
        if get_sec(item) == sec_trim(str(elapsed_time)):
            print item
        # print sec_trim(str(elapsed_time))

而不是遍历整个列表:

  1. 由于列表已排序,因此仅检查第一项。

  2. 到达第一项中指定的时间后,从列表中将其弹出。

我不完全理解您的问题,但是如果您想每秒顺序运行代码,则可以使用time.sleep('seconds')

import time
start_time = time.time()
elapsed_time = time.time() - start_time
while elapsed_time < 400:
    for item in times:
        elapsed_time = time.time() - start_time
        if get_sec(item) == sec_trim(str(elapsed_time)):
            print item
    time.sleep(1.0)

我继续写了我对其他答案的评论:

start_time = time.time()
elapsed_time = time.time() - start_time

# loop while we have times and we haven't run out of time
for next_str in times:
    if elapsed_time >= 400:
        break

    # if there's time to kill, go to sleep
    elapsed_time = time.time() - start_time
    wait_time = get_sec(next_str) - elapsed_time
    if wait_time > 0:
        time.sleep(wait_time)

    # do the thing
    print next_str
    # print sec_trim(str(elapsed_time))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM