2014-06-23 24 views

Odpowiedz

45

Spróbuj:

import time 

t_end = time.time() + 60 * 15 
while time.time() < t_end: 
    # do whatever you do 

ten trwa przez 15 minut, po 60 s = 900 sekund.

Funkcja time.time zwraca bieżący czas w sekundach od 1 stycznia 1970. Wartość jest zmiennoprzecinkową, więc można jej używać nawet z dokładnością do sekundy. Na początku wartość t_end obliczana jest na "teraz" + 15 minut. Pętla będzie działać, aż aktualny czas przekroczy ustawiony czas końcowy.

+0

Dzięki temu przetestowałem go oryginalnie z zaledwie 60 sekundami i zatrzymał się, więc wiem, że 15 minut też zadziała. – oam811

+0

Kolejne pytanie: czy działa następująca składnia? jeśli keys [pygame.K_LEFT]: answer = "left" f = open ("answer.rtf", "a") f.write (odpowiedź) f.close() To nie pozwoli mi otworzyć się plik tekstowy po, Zastanawiam się, czy robię coś nie tak lub jeśli mój komputer jest bałagan. – oam811

+0

Znalezienie drobnych błędów składniowych w kodzie jest bardzo trudne z komentarzy SO, więc może powinieneś utworzyć kolejne pytanie. Jednak przynajmniej jeśli operacja jest błędna, powinno być == zamiast =, a dwukropek powinien być po "lewej". Jeśli nie możesz pracować z rozsądnym wysiłkiem, opublikuj kolejne pytanie. (Tylko upewnij się, że nie zrobisz nic złego z wcięciami). – DrV

2

Jeśli dobrze rozumiem, możesz zrobić to z datetime.timedelta -

import datetime 

endTime = datetime.datetime.now() + datetime.timedelta(minutes=15) 
while True: 
    if datetime.datetime.now() >= endTime: 
    break 
    # Blah 
    # Blah 
+1

To zadziałało, ale używam odpowiedzi DrV tylko dlatego, że ma dla mnie więcej sensu. – oam811

+0

@ Elliott, czy jest jakiś powód, dla którego nie użyłeś porównania now() BobTuckerman

+0

@Bob Dopasowanie do pytania OP. –

-2

spróbuj tego:

import time 
import os 

n = 0 
for x in range(10): #enter your value here 
    print(n) 
    time.sleep(1) #to wait a second 
    os.system('cls') #to clear previous number 
        #use ('clear') if you are using linux or mac! 
    n = n + 1 
0

Wystarczy Można zrobić to

import time 
delay=60*15 ###for 15 minutes delay 
close_time=time.time()+delay 
while True: 
     ##bla bla 
     ###bla bla 
    if time.time()>close_time 
     break 
+0

Albo jeszcze bardziej po prostu 'while close_time> time.time():' bez potrzeby 'if time.time()> close_time: break' ... – Fr0zenFyr

0

szukałem łatwiejsza do odczytania pętla czasu, gdy napotkałem to pytanie tutaj. Coś jak:

for sec in max_seconds(10): 
     do_something() 

Więc stworzyliśmy pomocnika:

# allow easy time-boxing: 'for sec in max_seconds(42): do_something()' 
def max_seconds(max_seconds, *, interval=1): 
    interval = int(interval) 
    start_time = time.time() 
    end_time = start_time + max_seconds 
    yield 0 
    while time.time() < end_time: 
     if interval > 0: 
      next_time = start_time 
      while next_time < time.time(): 
       next_time += interval 
      time.sleep(int(round(next_time - time.time()))) 
     yield int(round(time.time() - start_time)) 
     if int(round(time.time() + interval)) > int(round(end_time)): 
      return 

Działa tylko z pełnymi sekund, co było dobre dla mojego użytku przypadku.

Przykłady:

for sec in max_seconds(10) # -> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
for sec in max_seconds(10, interval=3) # -> 0, 3, 6, 9 
for sec in max_seconds(7): sleep(1.5) # -> 0, 2, 4, 6 
for sec in max_seconds(8): sleep(1.5) # -> 0, 2, 4, 6, 8 

mieć świadomość, że przerwa nie jest dokładna, jak tylko czekać pełnych sekund (nigdy snu była dobra dla mnie z czasów < 1 sekundę). Więc jeśli twoja praca zajmuje 500 ms i pytasz o interwał 1 s, otrzymasz wywołanie: 0, 500 ms, 2000 ms, 2500 ms, 4000 ms i tak dalej. Można to naprawić, mierząc czas w pętli, a nie w trybie uśpienia() ...