2011-12-29 160 views
0
while True: 
    now = datetime.datetime.now() 
    if now.second == 1: 
     print "One" 

我的程序打印一次約7次。如何讓它只打印一次?Python 2.7 while循環時間

+0

我首先想到的是讓'time.sleep(1)'後,但是這可能是邪惡的:P – Interrobang 2011-12-29 10:56:53

+2

你確定,這是約7倍?那麼,這是非常低的數字,說實話。這意味着,您的計算機現在檢查值大約需要0.14秒。 順便說一下,請更正您的報價中的縮進。 – Gandi 2011-12-29 11:05:10

+0

@Gandi,好點。我的印刷品比stdout更能處理成千上萬的問題。 – Ben 2011-12-29 11:08:48

回答

2

您的電腦速度太快。

它需要當前時間,測試當前秒是否是一次,然後再次。既然速度如此之快,它可以在不到一秒的時間內做到這一點,你會得到更多的輸出線。

使每個迭代之後等待:

while True: 
    now = datetime.datetime.now() 
    if now.second == 1: 
     print "One" 
     time.sleep(59) # wait 59 seconds after success 
    time.sleep(1) # wait 1 second after each fail 

這一計劃將睡覺時間最多。如果你希望它做任何有用的事情,它將是一個不同的計劃。

+0

time.sleep(2)#等待2秒 還不夠? (對於速度太慢的計算機...) – jimifiki 2011-12-29 11:02:40

+0

加上信任'time.sleep'有點愚蠢,因爲它必須依賴系統,所以它出了名的不準確。你最好將這些時間減半。 – Ben 2011-12-29 11:05:35

0

如何存儲先前用於打印的值?

previous = None 
while True: 
    now = datetime.datetime.now() 
    if now.second == 1 and now.second != previous: 
     print "One" 
     previous = now.second # store the last value 
+1

你確定嗎?以前始終是1 – 2011-12-29 11:01:59

+0

而不是先前存儲now.second,現在存儲。 – 2011-12-29 11:06:58