假设要记录在没有自动化的枯燥任务上花了多少时间。 没有物理秒表,要为笔记本或智能手机找到一个免费的 秒表应用,且不会将浏览历史发送给市场 营销人员,又出乎意料地困难(在同意的许可协议中, 它说它可以这样做。确实阅读了许可协议)。 那么可以自己用Python写一个简单的秒表程序。
总的来说,程序需要完成以下任务:
- 记录从按下回车键开始,每次按键的时间,每次按键 都是一个新的“单圈”。
- 打印圈数、总时间和单圈时间。
这意味着代码将需要完成以下任务:
- 在程序开始时,通过调用
time.time()
得到当前时间, 将它保存为一个时间戳。在每个单圈开始时也一样。 - 记录圈数,每次用户按下回车键时加1。
- 用时间戳相减,得到计算流逝的时间。
- 处理
Keyboardlnterrupt
异常, 这样用户可以按Ctrl-C退出。
打开一个新的文件编辑器窗口,并保存为 stopwatch.py
。
stopwatch.py
- 一个简易秒表程序。
#! python3
import time
显示程序使用说明。
print('Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch.Press Ctrl-C to quit.')
input() # press Enter to begin
print('Started.')
startTime = time.time() # get the first lap's start time
lastTime = startTime
lapNum = 1
# TODO: Start tracking the lap times.
Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch.Press Ctrl-C to quit.
Started.
stopwatch.py
- 一个简易秒表程序。
#! python3
import time
print('Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch.Press Ctrl-C to quit.')
input() # press Enter to begin
print('Started.')
startTime = time.time() # get the first lap's start time
lastTime = startTime
lapNum = 1
Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch.Press Ctrl-C to quit.
开始记录分段计时。
try:
while True:
input()
lapTime = round(time.time() - lastTime, 2)
totalTime = round(time.time() - startTime, 2)
print('Lap #%s: %s (%s)' % (lapNum, totalTime, lapTime),end=' ')
lapNum += 1
lastTime = time.time() # reset the last lap time
except Keyboardlnterrupt:
# Handle the Ctrl-C exception to keep its error message from displaying.
print('\nDone.')
Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch.Press Ctrl-C to quit.
Started.
Lap #1: 5.2 (5.2)
如果用户按Ctrl-C停止秒表, Keyboardlnterrupt
异常将抛出,
如果程序的执行不是一个 try
语句,就会崩溃。为了防止崩溃,
将这部分程序包装在一个 try
语句中。在 except
子句中处理异常所以当Ctrl-C按下并引发异常时,
程序执行转向 except
子句,打印 Done
,而不是 Keyboardlnterrupt
错误消息。
在此之前,执行处于一个无限循环中,调用 input()
并等待,直到用户按下回车键结束一圈。
当一圈结束时,用当前时间 time.time()
减去该圈开始的时间lastTime
,计算该圈花了多少时间。
用当前时间减去秒表最开始启动的时间 startTime
,计算总共流逝的时间 。
由于这些时间计算的结果在小数点后有许多位(如4.766272783279419
),
所以用 round()
函数,将浮点值四舍五入到小数点后两位。
在 print('Lap #%s: %s (%s)' % (lapNum, totalTime, lapTime),end=' ')
中,
打印出圈数,消耗的总时间和单圈时间。由于用户为 input()
调用按下回车时,
会在屏幕上打印一个换行,所以向 print()
函数传入end =''
,避免输出重复空行。
打印单圈信息后,将计数器 lapNum
加1,
将 lastTime
设置为当前时间(这就是下一圈的开始时间),从而为下一圈做好准备。