2017-04-10 11 views
-1

私は単純なトラフィックライトシミュレータをPythonで持っていますが、すべては問題ありませんが、ループを終了する条件を追加していません。私は自分のコードに追加:特定の時間の後にループを終了する

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

これは私だった場合、私は2つのタイムスタンプ、ループ外1、および1つの内部を使用すると思います。このようなもの:

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) 
関連する問題