che cercavo un time-loop più facile da leggere quando ho incontrato questa domanda qui. Qualcosa di simile:
for sec in max_seconds(10):
do_something()
così ho creato questo helper:
# 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
Funziona solo con secondi pieni che era ok per il mio caso d'uso.
Esempi:
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
essere consapevoli del fatto che l'intervallo non è così precisa, in quanto io aspetto solo pieni secondi (il sonno non era niente di buono per me con tempi < 1 sec). Quindi se il tuo lavoro impiega 500 ms e richiedi un intervallo di 1 secondo, ti chiameremo a: 0, 500ms, 2000ms, 2500ms, 4000ms e così via. Si potrebbe risolvere questo misurando il tempo in un ciclo piuttosto che dormire() ...
Grazie ho provato inizialmente con solo 60 secondi e si è fermato quindi so che 15 minuti funzionerà anche. – oam811
Un'altra domanda: funziona la seguente sintassi? if keys [pygame.K_LEFT]: answer = "left" f = open ("answer.rtf", "a") f.write (risposta) f.close() Non mi permette di aprire dopo il file di testo, mi chiedo se sto facendo qualcosa di sbagliato o se il mio computer sta facendo casino. – oam811
La ricerca di leggere errori di sintassi nel codice è molto difficile dai commenti SO, quindi forse dovresti creare un'altra domanda. Tuttavia, almeno l'operazione if è sbagliata, dovrebbe esserci == invece di =, e il colon dovrebbe essere dopo "left". Se non riesci a farlo funzionare con uno sforzo ragionevole, posta un'altra domanda. (Assicurati di non fare nulla di sbagliato con il rientro.) – DrV