2016-09-27 10 views
-2

私はPython 3を使用していて、常時実行されているスクリプトを作成しようとしていて、特定のコードを実行しています。 これまでのコードでは、現在の分を確認し、指定した分よりも上の場合はメッセージを出力し、それ以外の場合は現在の分を出力して5秒待ってから再度試します。 問題は、コードが開始された分だけを出力することです。現在の分をPythonでループに印刷

import time 
from datetime import datetime 
now = datetime.now() 
hour = now.hour 
minute = now.minute 
L=1 

while (L == 1): 
    if minute > 39: 
     print ("It's past "+str(hour)+":"+str(minute)) 
     L = 2 
    else: 
     print(str(minute)) 
     time.sleep(5) 
+1

印刷するとすぐに 'L'を2に設定するので、whileループはfalseになります。また、whileループの中で 'now'を再定義しているわけではないので、常にプログラムを開始する時間があります。 –

答えて

1

いくつかのプログラミングのポインタ:

while (True): 
    if (...): 
     .... 
     break 

2)あなたの「今」変数は静的に更新する必要がありますされるに格納されている時刻:

1)は、一定のループは、次の構文を使用するようにするにはだから、

while (True): 
    now = datetime.now() 

ループ内の新しい時間と
while True: 
    now = datetime.now() 
    if now.minute > 39: 
     print "Hour, Minute:", now.hour, now.minute 
     print "All done!" 
     break 
    else: 
     print ""Minute, second:", now.minute, now.second 
    time.sleep(5) 

3)「実生活」(TM)では、あなたのイベントまで待つ時間を計算し、それを長持ちさせます。

now = time.now() 
if now.minute >= 39: 
    minutesToEvent = 0 
else: 
    minutesToEvent = 39 - now.minute 
print "Sleep seconds to next event:", minutesToEvent * 60 
sleep(minutesToEvent * 60) 
0

あなたはassigmentsにwhileループ内の

now = datetime.now() 
hour = now.hour 
minute = now.minute 

を挿入する必要があり、または、彼らはあなたがのあらゆる段階でnow変数の値を更新する必要が

0

をリフレッシュすることがありませんよループ。また、無駄な変数Lを削除し、while Trueに置き換えてコードを良くしました。

import time 
from datetime import datetime 

while True: 
    now = datetime.now() 
    if now.minute > 39: 
     print ("It's past "+str(hour)+":"+str(minute)) 
     # Run your desired code here. 
    else: 
     print(str(minute)) 
     time.sleep(5)