2017-04-10 89 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)