>>> from env_helper import info; info()
页面更新时间: 2020-02-22 15:54:43
操作系统/OS: Linux-4.19.0-8-amd64-x86_64-with-debian-10.3 ;Python: 3.7.3

5.14. 项目:简单的倒计时程序

就像很难找到一个简单的秒表应用程序一样,也很难找到一个 简单的倒计时程序。让我们来写一个倒计时程序,在倒计时结束时报警。

总的来说,程序要做到:

  • 从60倒数。

  • 倒数至0时播放声音文件(alarm.wav)。

这意味着代码将需要做到以下几点:

  • 在显示倒计时的每个数字之间,调用 time.sleep() 暂停一秒。

  • 调用 subprocess.Popen() ,用默认的应用程序播放声音文件。

打开一个新的文件编辑器窗口,并保存为 countdown.py

5.14.1. 第1步:倒计时

这个程序需要time模块的time.sleep()函数, subprocess模块的subprocess.Popen()函数。 输入以下代码并保存为countdown.py:

>>> #! python3
>>>
>>> # countdown.py - A simple countdown script.
>>>
>>> import time, subprocess
>>>
>>> timeLeft = 60
>>>
>>> while timeLeft > 0:
>>>     print(timeLeft,end=' ')
>>>     time.sleep(1)
>>>     timeLeft = timeLeft - 1
>>>
>>> # TODO: At the end of the countdown, play a sound file.
60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

导入 timesubprocess 后,创建变量 timeleft , 保存倒计时剩下的秒数。它从60开始,或者可以根据需要更改 这里的值,甚至通过命令行参数设置它。

while 循环中,显示剩余次数,暂停一秒钟,再减少 timeleft 变量的值,然后循环再次开始。只要 timeleft 大于0,循环就继续。在这之后,倒计时就结束了。

5.14.2. 第2步:播放声音文件

虽然有第三方模块,播放各种声音文件,但快速而简单的方法, 是启动用户使用的任何播放声音文件的应用程序。操作系统通过 .wav文件扩展名,会弄清楚应该启动哪个应用程序来播放该文件。 这个 .wav 文件很容易变成其他声音文件格式, 如 .mp3.ogg()

可以使用计算机上的任何声音文件,在倒计时结束播放, 也可以从http://nostarch.com/automatestuff/ 下载 alarm.wav() 在程序中添加以下代码:

>>> import time, subprocess
>>>
>>> timeLeft = 60
>>>
>>> while timeLeft > 0:
>>>     print(timeLeft,end=' ')
>>>     time.sleep(1)
>>>     timeLeft = timeLeft - 1
>>>
>>> # At the end of the countdown, play a sound file.
>>> subprocess.Popen(['start','alarm.wav'],shell=True)
60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
<subprocess.Popen at 0x7fe664636ac8>

while 循环结束后, alarm.wav(或你选择的声音文件) 将播放,通知用户倒计时结束。在 Windows 上,要确保传入 Popen() 的列表中包含’start’,并传入关键字参数 shell = True 。在OS X上,传入'open' , 而不是 'start',并去掉shell = True

除了播放声音文件之外,你可以在一个文本文件中保存一条消息, 例如 Break time is over!。然后在倒计时结束时用 Popen() 打开它。这实际上创建了一个带消息的弹出窗口。 或者你可以在倒计时结束时,用 webbrowser.open() 函数 打开特定网站。不像在网上找到的一些免费倒计时应用程序, 你自己的倒计时程序的警报可以是任何你希望的方式!

5.14.3. 第3步:类似程序的想法

倒计时是简单的延时,然后继续执行程序。 这也可以用于其他应用程序和功能,

诸如:

  • 利用time.sleep()给用户一个机会,按下Ctrl-C取消的 操作,例如删除文件。你的程序可以打印“Press Ctrl-C to cancel”, 然后用 tryexcept 语句处理所有Keyboardlnterrupt异常。

  • 对于长期的倒计时,可以用 timedelta 对象来测量直到未来某个时间点 (生曰?周年纪念?)的天、时、分和秒数。