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() ...
Dzięki temu przetestowałem go oryginalnie z zaledwie 60 sekundami i zatrzymał się, więc wiem, że 15 minut też zadziała. – oam811
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
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