2016-05-03 3 views
0

私は以下のプログラムを400秒間実行しています。whileループ全体を通して、タイムコードの配列を反復処理します。プログラムの経過時間がタイムコードの1つと同じであれば、何かします。問題は、毎秒何度も何度もタイムコードの配列を繰り返し処理し、現在は条件を満たしている2回目に何度も何かを行うことです。これを行う?条件が満たされた場合にif文のチェックを停止します

#!/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

あなたは 'break'と' continue'について知っていますか? https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops – leekaiinthesky

答えて

2

代わりに、リスト全体を反復処理の:

  1. リストがソートされているので、最初の項目をご確認ください。

  2. 最初の項目に指定した時間に達すると、リストからポップアップします。

+0

うん。ループの最後に 'time.sleep(0.5)'を追加すると、1秒のほとんどが時間をチェックしているので、CPU負荷を減らすのに役立ちます。それとも、もっと良いことに、次の時間まで残りの時間だけ寝るだけです。 –

0

私は先に行って、私は上の私のコメントに入れて何を書いた私は完全にあなたの質問を理解していなかったが、あなたはすべてのあなたのコードのシーケンシャルを実行したい場合は、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) 
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)) 
関連する問題