就像很难找到一个简单的秒表应用程序一样,也很难找到一个简单的倒计时程序。 接下来写一个倒计时程序,在倒计时结束时报警。
总的来说,程序要做到:
- 从60倒数。
- 倒数至0时播放声音文件(
alarm.wav
)。
这意味着代码将需要做到以下几点:
- 在显示倒计时的每个数字之间,调用
time.sleep()
暂停一秒。 - 调用
subprocess.Popen()
,用默认的应用程序播放声音文件。
打开一个新的文件编辑器窗口,并保存为 countdown.py
。
倒计时
这个程序需要 time
模块的 time.sleep()
函数,
subprocess
模块的 subprocess.Popen()
函数。
输入以下代码并保存为 countdown.py
:
countdown.py
—— 一款轻量级倒计时脚本。
#! python3
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
导入 time
和 subprocess
后,创建变量 timeleft
,
保存倒计时剩下的秒数。它从60开始,或者可以根据需要更改这里的值,
甚至通过命令行参数设置它。
在 while
循环中,显示剩余次数,暂停一秒钟,
再减少timeleft
变量的值,然后循环再次开始。
只要 timeleft
大于0,循环就继续。在这之后,倒计时就结束了。
播放声音文件
虽然有第三方模块,播放各种声音文件,但快速而简单的方法,
是启动用户使用的任何播放声音文件的应用程序。操作系统通过 .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
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(['start','alarm.wav'],shell=True)
alarm.wav: 1: start: not found
<Popen: returncode: None args: ['start', 'alarm.wav']>
while
循环结束后, alarm.wav
(或选择的声音文件)
将播放,通知用户倒计时结束。在 Windows 上,要确保传入
Popen()
的列表中包含'start
',并传入关键字参数
shell
= True
。在OS X上,传入'open'
,
而不是 'start'
,并去掉shell= True
。
除了播放声音文件之外,可以在一个文本文件中保存一条消息,
例如 Break time is over!
。然后在倒计时结束时用
Popen()
打开它。这实际上创建了一个带消息的弹出窗口。
或者可以在倒计时结束时,用 webbrowser.open()
函数
打开特定网站。不像在网上找到的一些免费倒计时应用程序,
自己的倒计时程序的警报可以是任何希望的方式!
倒计时是简单的延时,继续执行程序。 这也可以用于其他应用程序和功能。
诸如:
- 利用
time.sleep()
给用户一个机会,按下Ctrl-C取消的 操作,例如删除文件。程序可以打印“Press Ctrl-C to cancel
”, 然后用try
和except
语句处理所有Keyboardlnterrupt
异常。 - 对于长期的倒计时,可以用
timedelta
对象来测量直到未来某个时间点 (生曰?周年纪念?)的天、时、分和秒数。