2017-04-10 96 views
-1

我有一個簡單的Python交通燈模擬器,一切都很好,但我沒有添加終止循環的條件,我只需要循環在30秒後終止,什麼應該我添加到我的代碼:在特定時間後終止循環

import time 
from time import sleep 
from tkinter import * 
tk=Tk() 
win=Canvas(tk, width=55, height=200) 
win.pack() 
#functions 
def red(a): 
    for i in range(a): 
     red=win.create_oval(5,5,50,50, fill="red") 
     tk.update() 
     time.sleep(0.02) 

def redb(a): 
    for i in range(a): 
     red=win.create_oval(5,5,50,50, fill="black") 
     tk.update() 
     time.sleep(0.02) 
def amber(a): 
    for i in range(a): 
     amber=win.create_oval(5,55,50,100, fill="orange") 
     tk.update() 
     time.sleep(0.02) 
def amberb(a): 
    for i in range(a): 
     amber=win.create_oval(5,55,50,100, fill="black") 
     tk.update() 
     time.sleep(0.02) 
def green(a): 
    for i in range(a): 
     green=win.create_oval(5,105,50,150, fill="green") 
     tk.update() 
     time.sleep(0.02) 
def greenb(a): 
    for i in range(a): 
     green=win.create_oval(5,105,50,150, fill="black") 
     tk.update() 
     time.sleep(0.02) 
return red 
def lights(): 
    red=win.create_oval(5,5,50,50, fill="black") 
    amber=win.create_oval(5,55,50,100, fill ="black") 
    green=win.create_oval(5,105,50,150, fill="black") 
#end of functions 
#calling the functions 


lights() 
while True: 
red(30) 
redb(1) 
amber(10) 
amberb(1) 
green(30) 
greenb(1) 

tk.mainloop() 
+0

也許你可以[修復你的縮進](http://stackoverflow.com/posts/43327613/edit)所以你的代碼不是廢話。 – khelwood

+0

我做得很匆忙,我正在嘗試新的東西 –

+0

代碼中的縮進被打破了。 –

回答

0

如果這是我我會使用兩個時間戳,一個在循環外,一個裏面。類似這樣的:

import time 
initialTime = time.time(); 
doLoop = true;  

while (doLoop): 
    #Do Things 
    if ((time.time() - initialTime) > 30): 
     doLoop = false; 

解釋。首先,我們導入時間庫,並使用這個我們得到我們的初始時間戳,這是在幾秒鐘內。我相信。我們將條件變量設置爲true並在此上循環。現在,當我們完成我們想要做的事情時,我們再次獲得當前時間,並從之前的時間中減去它。如果剩餘的值大於30,我們可以停止循環。

+0

明白了,謝謝.. –

0

您正在按照0.02秒的間隔實施您的功能。我不知道爲什麼,但那是你選擇的時鐘刻度。

所以實現自己的「延遲」功能,讓它保持跟蹤的事情:

global Ticks = 0.0 
global Tick_secs = 0.02 

def delay(nticks): 
    time.sleep(Tick_secs * nticks) 
    Ticks += nticks 

一旦你保持的度過,建立其轉換回標準時間的另一功能的所有時間軌跡(秒):

def elapsed_seconds(): 
    return Ticks * Tick_secs 

現在重寫代碼專門調用這些功能,讓你隨時記錄多少時間在流逝,並能確定經過的時間。

while elapsed_seconds() < 30: 
    red(30) 
    redb(1) 
    amber(10) 
    amberb(1) 
    green(30) 
    greenb(1)