在 Python 中创建倒数计时器

本教程介绍如何在 Python 中创建倒数计时器。

该代码接受倒计时应该多长时间的输入,并在输入后立即开始倒计时。

在 Python 中使用 time 模块和 sleep() 函数创建倒数计时器

time 模块是一个通用的 Python 模块,包含与时间相关的实用函数和变量。本教程中使用的主要函数是 sleep() 函数,它是一个异步函数,可将单个线程的执行暂停 n 秒。

如果你的程序是单线程的,这就是本教程的情况,那么 sleep() 函数将停止整个程序运行,直到达到给定的经过时间。有了这个,连同经过验证的用户输入,我们可以在 Python 中创建一个简单的倒数计时器。

首先要做的是导入 time 模块以使用 sleep() 函数。

import time

然后声明一个函数作为倒数计时器。我们称这个函数为 countdown()。该函数将接受一个参数:计时器将倒计时的秒数(num_of_secs)。

num_of_secs 变量将在循环中不断递减,直到达到 0(转换为 False 并在没有任何额外条件的情况下结束循环)。

在循环中,将输入变量 num_of_secs 格式化为 MM:SS 格式,并在每次递减时将其打印出来。为此,请使用 Python 内置函数 divmod(),该函数接受两个数字并分别返回乘积和两个数字的余数。然后使用内置字符串函数 format() 将 divmod() 的元组结果格式化为 MM:SS 格式。

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} 将参数格式化为 2 位整数(因为符号 02d)。如果整数小于 2 位,它将添加前导 0

接下来,在循环的每次迭代中,调用 time.sleep(1),这意味着它会将每次迭代延迟 1 秒,并在经过后继续。

在调用 sleep() 函数之前,打印出类似于输入变量 num_of_secs 的当前值的 MM:SS 格式的格式化字符串。

此外,在 print() 函数中添加另一个参数,其属性为 end,值为 /r,这是一个模拟实际计时器行为的新行。每次执行循环时,此参数都会覆盖之前的 print() 输出,覆盖由符号 /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.')
        

之后,在所有前面的行都执行完后,将输入变量 min_sec_format 减 1。

最后,在循环外打印出一个结束语句,表示计时器已完成执行。它结束了 countdown() 方法并将用作倒数计时器。

接下来要做的是为用户提供一种方法来输入触发倒计时的秒数。为此,我们可以使用内置的 input() 函数来接受用户输入。

将输入捕获到变量中并将其用作倒计时函数的参数。确保将输入变量转换为 int 以进行验证。

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

整个代码应该是这样的:

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)

输出:

Countdown finished.

最终输出将显示 Countdown Finished,但会模仿计时器的工作方式并清除每个 print() 行,直到到达 00:00

因此,如果你输入 5 秒,堆栈跟踪将如下所示:

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

你有它。你现在已经成功地使用 Python 中的内置函数和 time 模块中的 sleep() 函数成功地创建了一个简单的倒数计时器。