Crear un temporizador de cuenta regresiva en Python

Rayven Esplanada 22 enero 2022
Crear un temporizador de cuenta regresiva en Python

Este tutorial presenta cómo crear un temporizador de cuenta atrás en Python.

El código acepta una entrada de cuánto tiempo debe ser la cuenta regresiva y comenzará la cuenta regresiva inmediatamente después de que se ingrese la entrada.

Uso del módulo time y la función sleep() para crear un temporizador de cuenta atrás en Python

El módulo time es un módulo general de Python que contiene funciones y variables de utilidad relacionadas con el tiempo. La función main utilizada en este tutorial es la función sleep(), que es una función asincrónica que suspende la ejecución de un solo hilo durante n segundos.

Si su programa es de un solo subproceso, que es el caso de este tutorial, entonces la función sleep() detendrá la ejecución de todo el programa hasta que se alcance el tiempo transcurrido. Con esto, junto con la entrada del usuario validada, podemos crear un temporizador de cuenta regresiva simple en Python.

Lo primero que debe hacer es importar el módulo time para usar la función sleep().

import time

Luego declare una función para que actúe como temporizador de cuenta regresiva. Llamemos a esta función countdown(). La función aceptará un único parámetro: el número de segundos (num_of_secs) hasta el que el temporizador contará.

La variable num_of_secs se decrementará continuamente en un bucle hasta que llegue a 0 (que se traduce en False y finaliza el bucle sin ninguna condición adicional).

Dentro del bucle, formatee la variable de entrada num_of_secs en formato MM:SS e imprímalo cada vez que disminuya. Para hacer esto, use la función incorporada de Python divmod(), que acepta dos números y devuelve el producto y el resto de los dos números, respectivamente. A continuación, formatee el resultado de la tupla de divmod() en formato MM:SS utilizando la función de cadena incorporada 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} formatea el argumento en un número entero de 2 dígitos (debido al símbolo 02d). Si el número entero tiene menos de 2 dígitos, se le agregarán 0 iniciales.

A continuación, con cada iteración del bucle, llame a time.sleep(1), lo que significa que retrasa cada iteración por 1 segundo y continuará después de transcurrido.

Antes de llamar a la función sleep(), imprima la cadena formateada que se asemeja al formato MM:SS del valor actual de la variable de entrada num_of_secs.

Además, agregue otro argumento dentro de la función print() con la propiedad end y el valor /r, que es una nueva línea para imitar el comportamiento de un temporizador real. Este argumento sobrescribe la salida anterior print() cada vez que se ejecuta el bucle, sobrescribiendo todo antes de que el retorno de carro se indique con el símbolo /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.")

Luego, disminuya la variable de entrada min_sec_format en 1 después de que se hayan ejecutado todas las líneas anteriores.

Finalmente, imprima una declaración final fuera del bucle que indique que el temporizador ha terminado de ejecutarse. Concluye el método countdown() y funcionará como un temporizador de cuenta regresiva.

Lo siguiente que debe hacer es proporcionar una forma para que el usuario ingrese el número de segundos para activar la cuenta regresiva. Para esto, podemos usar la función incorporada input() para aceptar la entrada del usuario.

Capture la entrada en una variable y úsela como argumento para la función de cuenta regresiva. Asegúrese de convertir la variable de entrada a int para su validación.

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

El código completo debería verse así:

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)

Producción :

Countdown finished.

La salida final mostraría Countdown Finished, pero imitará cómo funciona un temporizador y borrará cada línea print() hasta que llegue a 00:00.

Entonces, si ingresara 5 segundos, el seguimiento de la pila se vería así:

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

Ahí tienes. Ahora ha creado con éxito un temporizador de cuenta atrás simple en Python usando solo funciones integradas y la función sleep() del módulo time.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artículo relacionado - Python Timer