Crea un timer per il conto alla rovescia in Python

Crea un timer per il conto alla rovescia in Python

Questo tutorial introduce come creare un conto alla rovescia in Python.

Il codice accetta un input di quanto dovrebbe essere lungo il conto alla rovescia e inizierà il conto alla rovescia immediatamente dopo l’immissione dell’input.

Utilizzo del modulo time e della funzione sleep() per creare un timer per il conto alla rovescia in Python

Il modulo time è un modulo Python generale che contiene funzioni e variabili di utilità relative al tempo. La funzione principale utilizzata in questo tutorial è la funzione sleep(), che è una funzione asincrona che sospende l’esecuzione di un singolo thread per n secondi.

Se il tuo programma è a thread singolo, come nel caso di questo tutorial, la funzione sleep() interromperà l’esecuzione dell’intero programma fino al raggiungimento del tempo trascorso. Con questo, insieme all’input dell’utente convalidato, possiamo creare un semplice timer per il conto alla rovescia in Python.

La prima cosa da fare è importare il modulo time per utilizzare la funzione sleep().

import time

Quindi dichiarare una funzione che agisca come timer per il conto alla rovescia. Chiamiamo questa funzione countdown(). La funzione accetterà un singolo parametro: il numero di secondi (num_of_secs) di cui il timer eseguirà il conto alla rovescia.

La variabile num_of_secs verrà continuamente decrementata in un bucle fino a raggiungere 0 (che si traduce in False e termina il bucle senza alcuna condizione aggiuntiva).

All’interno del bucle, formatta la variabile di input num_of_secs nel formato MM:SS e stampala ogni volta che diminuisce. Per fare ciò, usa la funzione Python incorporata divmod(), che accetta due numeri e restituisce rispettivamente il prodotto e il resto dei due numeri. Quindi formattare il risultato della tupla di divmod() nel formato MM:SS utilizzando la funzione di stringa incorporata format().

def countdown(num_of_secs):
    while num_of_secs:
        m, s = divmod(num_of_secs, 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)

{:02d} formatta l’argomento in un numero intero di 2 cifre (a causa del simbolo 02d). Se l’intero è inferiore a 2 cifre, verrà aggiunto lo 0 iniziale.

Successivamente, ad ogni iterazione del bucle, chiama time.sleep(1), il che significa che ritarda ogni iterazione di 1 secondo e continuerà dopo che è trascorso.

Prima di chiamare la funzione sleep(), stampare la stringa formattata che assomiglia al formato MM:SS del valore corrente della variabile di input num_of_secs.

Inoltre, aggiungi un altro argomento all’interno della funzione print() con la proprietà end e il valore /r, che è una nuova riga per imitare il comportamento di un vero timer. Questo argomento sovrascrive il precedente output print() ogni volta che viene eseguito il bucle, sovrascrivendo tutto prima che il ritorno a capo sia indicato dal simbolo /r.

def countdown(num_of_secs):
    while num_of_secs:
        m, s = divmod(num_of_secs, 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)
        print(min_sec_format, end='/r')
        time.sleep(1)
        num_of_secs -= 1
        
    print('Countdown finished.')
        

Successivamente, decrementa la variabile di input min_sec_format di 1 dopo che tutte le righe precedenti sono state eseguite.

Infine, stampa un’istruzione conclusiva al di fuori del bucle che denota che il timer ha terminato l’esecuzione. Conclude il metodo countdown() e funzionerà come timer per il conto alla rovescia.

La prossima cosa da fare è fornire all’utente un modo per inserire il numero di secondi per attivare il conto alla rovescia. Per questo, possiamo usare la funzione input() incorporata per accettare l’input dell’utente.

Cattura l’input in una variabile e usalo come argomento per la funzione di conto alla rovescia. Assicurati di trasmettere la variabile di input a int per la convalida.

inp = input('Input number of seconds to countdown: ')
countdown(int(inp))

L’intero codice dovrebbe assomigliare a questo:

import time

def countdown(num_of_secs):
    while num_of_secs:
        m, s = divmod(num_of_secs, 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)
        print(min_sec_format, end='/r')
        time.sleep(1)
        num_of_secs -= 1
        
    print('Countdown finished.')

inp = input('Input number of seconds to countdown: ')
countdown(inp)

Produzione:

Countdown finished.

L’output finale visualizzerà Countdown Finished, ma imiterà il funzionamento di un timer e cancellerà ogni riga print() fino a raggiungere 00:00.

Quindi, se inserisci 5 secondi, la traccia dello stack sarebbe simile a questa:

00:05
00:04
00:03
00:02
00:01
Countdown finished.

Ecco qui. Ora hai creato con successo un semplice conto alla rovescia in Python usando solo le funzioni integrate e la funzione sleep() dal modulo time.

Articolo correlato - Python Timer

  • Funzioni timer in Python