PythonJavaJavaScriptCGo等编程语言如何实现“定时器”功能
Posted 坚持不懈的大白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PythonJavaJavaScriptCGo等编程语言如何实现“定时器”功能相关的知识,希望对你有一定的参考价值。
这是CSDN平台2月推出的一个活动(活动链接为:CSDN 征文活动),聊聊时间的话题,小编我也不知道有什么好聊的时间的话题,看了CSDN给出的部分话题上,有一个这样的话题,如何用各种编程语言实现“定时器”,觉得这个不错,于是就写了这篇博文。
文章目录
1. “定时器”原理
首先,小编讲述一下小编实现的“定时器”原理,利用到转义字符,主要使用的转义字符为:\\r,在window系统,它表示:\\r:回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖(光标在该行的头部),小编基于这个原理,从而动态显示“定时器”上秒、分、时数的变化。当然,这个代码也是存在一定问题的,如果读者的电脑是其他系统的,下述代码运行结果可能会有一定问题喔!(如:在Mac中,\\r表示换行)。另外,小编实现的“定时器”除了Python、html外,其他实现的编程语言都没有添加提示功能(就是到点时,播放一个音频文件)。
下面是运用几种常见的编程语言实现“定时器”功能(就比如午睡吧!从某时刻程序开始运行,到程序结束时提醒用户该起来敲代码了)。
2. Python 实现
import time
time_2 = 20
# 计时时间(单位:秒)
for i in range(time_2):
time.sleep(1)
print('主人,该起来敲代码了!')
这代码的确一点毛病也没有,但是,却起不到提示作用(毕竟只是在控制台打印输出信息而已)
为此,可以增加一个音频文件播放,如下:
import time
from pygame import mixer
time_2 = 1
# 计时时间(单位:秒)
filename = '1.mp3'
# 音频文件存储路径
for i in range(time_2):
time.sleep(1)
print('主人,该做XXX事情了!')
mixer.init()
mixer.music.load('1.mp3')
mixer.music.set_volume(1)
mixer.music.play(loops=-1)
# loops=-1表示重复播放
while mixer.music.get_busy():
str_1 = input("输入:(只要不为空即可)")
if str_1 != '':
mixer.music.stop()
# 结束音乐播放
mixer.stop()
# 停止播放所有通道
break
运行结果(音频文件会重复播放,直到用户在控制台输入一个非空字符串才会停止):
Python实现计时器
但是这样好像也不怎么完美,就是看不到计时时间的倒计时,于是小编引入 sys模块,增加一个时间倒计时的显示,参考代码如下:
import time
from pygame import mixer
import sys
time_2 = 3660
# 计时时间(单位:秒)
filename = '1.mp3'
# 音频文件存储路径
def get_str(sum_seconds: int):
hour = sum_seconds // (60 * 60)
# 小时
minute = (sum_seconds - 3600 * hour) // 60
# 分
second = sum_seconds - hour * 3600 - minute * 60
# 秒
return ':02d::02d::02d'.format(hour, minute, second)
for i in range(time_2, -1, -1):
sys.stdout.write('\\r')
sys.stdout.write(get_str(i))
sys.stdout.flush()
time.sleep(1)
print('\\n主人,该做XXX事情了!')
mixer.init()
mixer.music.load('1.mp3')
mixer.music.set_volume(1)
mixer.music.play(loops=-1)
# loops=-1表示重复播放
while mixer.music.get_busy():
str_1 = input("输入:(只要不为空即可)")
if str_1 != '':
mixer.music.stop()
# 结束音乐播放
mixer.stop()
# 停止播放所有通道
break
运行结果:
Python实现计时器
3. Java实现
Java实现最简单的代码肯定是这个了。
public class Test
public static void main(String[] args)
int time_2 = 5;
for(int i=0;i<time_2;i++)
try
Thread.sleep(1000);
// 单位:毫秒
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("主人,该起来敲代码了!");
如果使用Java也想达到上述Python那种效果,参考代码如下:
public class Test
private static String getStr(int sumSeconds)
int hour = sumSeconds/3600;
int minute = (sumSeconds - hour*3600)/60;
int second = sumSeconds - hour*3600 - minute *60;
return String.format("%02d:%02d:%02d", hour,minute,second);
public static void main(String[] args) throws Exception
int time_2 = 3660;
String str_2 = "\\r";
for(int i=time_2;i>=0;i--)
String timeStr = getStr(i);
System.out.print(str_2);
System.out.print(timeStr);
try
Thread.sleep(1000);
// 单位:毫秒
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("\\n主人,该起来敲代码了!");
【注】:没有音频文件的播放。
运行结果(直接使用cmd命令运行,上述代码直接在eclipse上运行,还是会出现换行问题,idea没有试过,不知道会不会出现那个问题,但是在命令窗口上运行是没有问题的。):
4. javascript实现(需要下载nodejs才行)
var time_2 = 5*60;
// 单位:秒
var fun1 = (sum_second) =>
let hour = parseInt(sum_second / 3600);
let minute = parseInt((sum_second - 3600*hour) / 60);
let second = sum_second - hour * 3600 - minute * 60;
hour = hour > 10 ? '' + hour : '0' + hour;
minute = minute > 10 ? '' + minute : '0' + minute;
second = second > 10 ? '' + second : '0' + second;
return `$hour:$minute:$second`;
var fun2 = () =>
let i = time_2;
let timer = setInterval(() =>
if (i < 0)
clearInterval(timer);
console.log('\\n主人,该起来敲代码了!');
process.stdout.write('\\r');
process.stdout.write(fun1(i));
// 不会换行
i--;
, 1000)
fun2();
运行结果:
5. C语言实现
参考代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main()
int time_2 = 5;
// 秒数(单位:秒)
for(int i=time_2;i>0;i--)
int sumSecond = i;
int hour = sumSecond / 3600;
int minute = (sumSecond - hour * 3600) / 60;
int second = sumSecond - hour * 3600 - minute * 60;
printf("%02d:%02d:%02d",hour,minute,second);
printf("\\r");
Sleep(1000);
printf("\\n主人,该起来敲代码了!\\n");
system("pause");
return 0;
运行结果如下:
【注】:小编上述实现代码是在vscode上运行的,如果读者在其他编辑器上运行,可以不加这句代码(system(“pause”);),依旧可以运行成功的!
6. Go语言实现
参考代码如下:
package main
import (
"fmt"
"time"
)
func main()
time_2 := 3660
// 时间(单位:秒)
for i := time_2;i > 0;i --
hour := i/3600
minute := (i - 3600 * hour)/60
second := i - hour * 3600 - minute * 60
timeStr := fmt.Sprintf("%02d:%02d:%02d",hour,minute,second);
fmt.Print(timeStr);
time.Sleep(time.Duration(1)*time.Second);
fmt.Print("\\r");
fmt.Println("主人,该起来敲代码了!");
运行结果:
7. HTML实现
参考代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>定时器</title>
</head>
<style type="text/css">
*
margin: 0;
padding: 0;
body
width: 100%;
.time
margin: 0 auto;
/* 设置居中显示 */
text-align: center;
width: 160px;
font-family: ;
font-size: 40px;
</style>
<body>
<div class="time">00:00:00</div>
<audio loop src="./1.mp3"></audio>
</body>
<script type="text/javascript">
var sumSecond = 5;
// 单位:秒
var timeEle = document.querySelector('.time');
var audioEle = document.querySelector('audio');
var timer = setInterval(()=>
let hour = parseInt(sumSecond/3600);
let minute = parseInt((sumSecond-hour*3600)/60);
let second = sumSecond - hour * 3600 - minute * 60;
hour = '' + hour;
if(hour < 10)
hour = '0' + hour;
minute = '' + minute;
if(minute < 10)
minute = '0' + minute;
second = '' + second;
if(second < 10)
second = '0' + second;
timeEle.innerHTML = `$hour:$minute:$second`;
sumSecond --;
if(sumSecond<0)
clearInterval(timer);
audioEle.play();
// 音频播放
,1000);
</script>
</html>
直接把这个html文件放到谷歌浏览器、Edge浏览器(QQ浏览器上运行没有问题)上运行,会报如下错误:
报错信息为:the user didn’t interact with the document first.
看了一位大佬的文章上讲:
说明浏览器版本太高,不支持了,所以要想上述代码成功运行,可以下载一个QQ浏览器或者类似的浏览器。(当然,如果读者有好的改进建议,欢迎评论)
欢迎各位大佬评论,指出上述代码中存在的问题。
以上是关于PythonJavaJavaScriptCGo等编程语言如何实现“定时器”功能的主要内容,如果未能解决你的问题,请参考以下文章