假设要记录在没有自动化的枯燥任务上花了多少时间。你没有物理秒表,要为
笔记本或智能手机找到一个免费的秒表应用,没有广告,且不会将你的浏览历史发送给市场营销人员,又出乎意料地困难(在你同意的许可协议中,它说它可以这样做。你确实阅读了许可协议,不是吗?)。你可以自己用 
Python 写一个简单的秒表程序。
总的来说,你的程序需要完成:
•    记录从按下回车键开始,每次按键的时间,每次按键都是一个新的“单圈”。
•    打印圈数、总时间和单圈时间。
这意味着代码将需要完成以下任务:
•    在程序开始时,通过调用 time.time()得到当前时间,将它保存为一个时间戳。在每个单圈开始时也一样。
•    记录圈数,每次用户按下回车键时加 1。
•    用时间戳相减,得到计算流逝的时间。
•    处理 KeyboardInterrupt 异常,这样用户可以按Ctrl-C 退出。打开一个新的文件编辑器窗口,并保存为 stopwatch.py。

第 1 步:设置程序来记录时间
秒表程序需要用到当前时间,所以要导入的 time 
模块。程序在调用input()之前,也应该向用户打印一些简短的说明,这样计时器可以在用户按下回车键后开始。然后,代码将开始记录单圈时间。在文件编辑器中输入以下代码,为其余的代码编写 TODO 
注释,作为占位符:
#!  python3
#  stopwatch.py  -  A  simple  stopwatch  program. import  time
#  Display  the  program's  instructions.
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.

既然我们已经编码显示了用户说明,那就开始第一圈,记下时间,并将圈数设为 1。

第 2 步:记录并打印单圈时间
现在,让我们编码开始每一个新的单圈,计算前一圈花了多少时间,并计算自启动秒表后经过的总时间。我们将显示的单圈时间和总时间,为每个新的单圈增加圈计数。将下面的代码添加到程序中:

#!  python3
#  stopwatch.py  -  A  simple  stopwatch  program. import  time
--snip--
#  Start  tracking  the  lap  times.
➊  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  KeyboardInterrupt:
#  Handle  the  Ctrl-C  exception  to  keep  its  error  message  from  displaying. 
print('\nDone.')

如果用户按 Ctrl-C 停止秒表,KeyboardInterrupt 异常将抛出,如果程序的执行不是一个 try 语句,就会崩溃。为了防止崩溃,我们将这部分程序包装在一个 try 
语句中➊。我们将在 except 子句中处理异常➏,所以当 Ctrl-C 按下并引发异常时,程序执行转向 except 子句,打印Done,而不是 
KeyboardInterrupt 错误消息。在此之前,执行处于一个无限循环中➋,调用 
input()并等待,直到用户按下回车键结束一圈。当一圈结束时,我们用当前时间time.time()减去该圈开始的时间 
lastTime,计算该圈花了多少时间➌。我们用当前时间减去秒表最开始启动的时间 startTime,计算总共流逝的时间➍。
由于这些时间计算的结果在小数点后有许多位(如 4.766272783279419),所以我们在➌和➍行用 
round()函数,将浮点值四舍五入到小数点后两位。
在➎行,我们打印出圈数,消耗的总时间和单圈时间。由于用户为 input()调用按下回车时,会在屏幕上打印一个换行,所以我们向 print()函数传入 
end='',避免输出重复空行。打印单圈信息后,我们将计数器 lapNum 加 1,将 lastTime 设置为当前时间(这就是下一圈的开始时间),从而为下一圈做好准备。

第 3 步:类似程序的想法
时间追踪为程序打开了几种可能性。虽然可以下载应用程序来做其中一些事情,但自己编程的好处是它们是免费的,而且不会充斥着广告和无用的功能。可以编写类似的程序来完成以下任务:

•    创建一个简单的工时表应用程序,当输入一个人的名字时,用当前的时间记录下他们进入或离开的时间。
•    为你的程序添加一个功能,显示自一项处理开始以来的时间,诸如利用 requests
模块进行的下载(参见第 11 章)。
•    间歇性地检查程序已经运行了多久,并为用户提供了一个机会,取消耗时太长的任务。

5.3 项目:超级秒表相关推荐

  1. Android Studio 第一次新建Android Gradle项目超级慢的解决方案

    Android Studio 第一次新建Android Gradle项目超级慢的解决方案 参考文章: (1)Android Studio 第一次新建Android Gradle项目超级慢的解决方案 ( ...

  2. [适合前端新手vue项目]超级可爱的宠物APP

    [适合前端新手项目]超级可爱的宠物APP > < 基于网上找的UI设计图,实现简单的移动端静态页面:利用VUE框架进行管理:Mock实现模拟数据:添加了token登录和注册功能 本项目用到 ...

  3. python项目超级大脑-python项目之超级大脑

    超级大脑 程序说明 我们已经为你准备了程序模板:memory.py,模板中导入了必要的模块和一些全局变量,你需要编写一些函数,实现这个游戏. 通过该项目你可以巩固对鼠标事件驱动编程,函数和列表的理解. ...

  4. 【区块链】GO语言区块链项目——超级账本

    区块链的应用:版权保护 区块链用于版权保护的方式: 把文章内容存在第三方数据库,用文章内容生成一个哈希,把哈希写入到区块链. 取数据的时候(需要溯源的时候),去区块链把哈希值取下来,然后用哈希寻址找到 ...

  5. python小项目超级大脑抱香_“超级大脑”来了!丰泽区建成全市首个区县级大数据中心...

    近日,历时一年建设的智慧丰泽(一期)项目全面完工,进入运营阶段.智慧丰泽项目的建成,标志着丰泽区新型智慧城市建设取得阶段性进展,将对提升丰泽城市品位.塑造城市新名片.带动丰泽数字经济发展.改善宜居环境 ...

  6. python小项目超级大脑抱香_超级大脑教练 - 主页

    ${content} 你输入的邮件地址曾经通过${type}激活了本站帐号,请使用${type}帐号直接登录. 课程习题 : 提示 请选择一个答案 提交 查看正确答案 下一题 ${option}: $ ...

  7. 程序员到项目经理:从内而外的提升不看后悔去吧

    从程序员到项目经理(一):为什么要当项目经理 "从程序员到项目经理",这个标题让我想起了很久以前一本书的名字<从Javascript到Java>.然而,从Javascr ...

  8. 从程序员到项目经理(四):外行可以领导内行吗

    一.从几个招聘要求说起 在上一篇中,我举出了一个招聘需求,引起一些朋友的争论.既然招聘的是项目经理,为什么需要那么多专业技能呢? 在百度上招聘频道搜索"软件项目经理招聘",可以查到 ...

  9. 【愚公系列】华为云系列之DevCloud+ECS+MySQL搭建超级冷笑话网站【开发者专属集市】

    文章目录 前言 1.项目背景 2.项目介绍 3.所需华为云环境 一.华为云系列之DevCloud+ECS+MySQL搭建超级冷笑话网站 1.创建项目 2.创建代码仓库 3.创建数据库 4.修改代码 5 ...

  10. 从程序员到项目经理(4):外行可以领导内行吗【转载】

    一.从几个招聘要求说起 在上一篇中,我举出了一个招聘需求,引起一些朋友的争论.既然招聘的是项目经理,为什么需要那么多专业技能呢? 在百度上招聘频道搜索"软件项目经理招聘",可以查到 ...

最新文章

  1. c语言自定义char*函数返回值是乱码_[每日C语言」printf()函数的修饰符和返回值...
  2. 哈夫曼编解码(C语言)
  3. Apache Drill 1.4性能增强的简要概述
  4. 95-080-058-源码-启动-启动taskexecutor
  5. 字符串压缩——C语言
  6. Machine Learning Yearning 中文翻译稿
  7. android预览界面显示不全,Android SurfaceView Camera 预览显示不全(画面拉伸)
  8. QString字符串中双引号的梗
  9. 如何在高通平台新建项目
  10. 全球与中国塑料树脂市场深度分析及发展研究预测报告
  11. OPENSSH格式的private key转换成RSA格式生成pem文件
  12. (35)zabbix Event acknowledgment事件确认
  13. 与班尼特·胡迪一起攻破浮空城 (HZNU-2264)
  14. 东原地产的女性视角——对话罗韶颖
  15. 美国出台商用无人机新规,宝宝表示我也要去考无人机飞行员驾照
  16. Java开发必备技巧
  17. C/C++之cpp变exe
  18. jenkins-RestAPI调用出现Error 403 No valid crumb was included in the request解决方法
  19. 委托朋友理财有风险吗
  20. VMware设置虚拟机连接内外网

热门文章

  1. 光流与Lucas-Kanade 光流法
  2. cuba-platform和jmix框架
  3. 零代码工具推荐 八爪鱼采集器
  4. smartUp手势插件Chrome
  5. 李嘉诚激励员工的一首诗
  6. VisionTransformer(一)—— Embedding Patched与Word embedding及其实现
  7. 保护眼睛的颜色和各种背景颜色设置方法(转)
  8. 每日10行代码34:wordcloud生成词云时过滤掉某些词
  9. linux 安装mantis,在Ubuntu 18.04系统上安装Mantis Bug Tracker[MantisBT]
  10. Mac -- 插入移动硬盘后没有显示