前景提要部分介绍实现秒表功能时会用到的一些方法以及可能遇到的问题。
round()
用于返回浮点数的四舍五入值,第一个参数是目标值,第二个参数是精度,没有的话默认四舍五入到整数,得到的数据类型是int;当第二个参数是0,虽然四舍五入到整数,但依旧会保留一位小数,得到的数据类型是float
except KeyboardInterrupt: # 键盘输入ctrl+c没有生效
在pycharm中运行程序与正常运行不太一样,特别是在处理键盘字符方面。按ctrl-c的方式,pycharm认为您想要复制文本。python程序永远看不到字符。想要让运行中的pycharm接收键盘输入,需要开启模拟终端模式。具体步骤如下:在 PyCharm 中打开“Run/Debug Configurations”。
勾选下方红框,使得pycharm在输出控制台中模拟终端,从而可以接受键盘中断(确保控制台处于焦点状态)。
下图中的热点代表的就是控制台可以处于焦点状态。
\r
用于将光标退回到开始位置,不会进行删除只会进行覆盖。print
语句中\r
和end=""
结合使用可以对计时效果进行优化。
# 实现秒表功能
import time
input('点击enter键开始计时,点击ctrl+c停止计时')
start_time = time.time() # 获取当前时间
try:
while True:
print(round(time.time() - start_time, 0), '秒') # round()方法用于四舍五入,第二个参数没有传,默认四舍五入到整数
time.sleep(1) # 停顿1秒
except KeyboardInterrupt: # 当键盘输入ctrl+c会触发异常
print('总共耗时:', round(time.time() - start_time, 2), 'sec') # round()方法第二个参数传2表示四舍五入到两位小数
# 策略1
import time
input('点击enter键开始计时')
start_time = time.time()
while True:
print('\r%.f秒'%(round(time.time() - start_time, 0)), end="") # 优化后的语句
time.sleep(1)
# 策略2
import time
input('点击enter键开始计时')
start_time = time.time()
while True:
print('\r'+str(round(time.time() - start_time))+'秒', end="") # 优化后的语句
time.sleep(1)
实现结果如下:
注意点:
策略1和策略2当输出控制台处于模拟终端的情况下无法产生上面的效果。所以效果虽然优化了但无法用ctrl+c停止计时。