[英]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))
而不是遍历整个列表:
由于列表已排序,因此仅检查第一项。
到达第一项中指定的时间后,从列表中将其弹出。
我不完全理解您的问题,但是如果您想每秒顺序运行代码,则可以使用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.