这是CSDN平台2月推出的一个活动(活动链接为:CSDN 征文活动),聊聊时间的话题,小编我也不知道有什么好聊的时间的话题,看了CSDN给出的部分话题上,有一个这样的话题,如何用各种编程语言实现“定时器”,觉得这个不错,于是就写了这篇博文。
下面是运用几种常见的编程语言实现“定时器”功能(就比如午睡吧!从某时刻程序开始运行,到程序结束时提醒用户该起来敲代码了)。
1. Python 实现
import timetime_2 = 20
# 计时时间(单位:秒)
for i in range(time_2):time.sleep(1)
print('主人,该起来敲代码了!')
这代码的确一点毛病也没有,但是,却起不到提示作用(毕竟只是在控制台打印输出信息而已)
为此,可以增加一个音频文件播放,如下:
import time
from pygame import mixertime_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 systime_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实现计时器
2. 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 blocke.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 blocke.printStackTrace();}}System.out.println("\n主人,该起来敲代码了!");}
}
【注】:没有音频文件的播放。
运行结果(直接使用cmd命令运行):
3. 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();
运行结果:
4. 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;
}
运行结果如下:
5. Go语言实现
参考代码如下:
package mainimport ("fmt""time"
)func main(){time_2 := 3660// 时间(单位:秒)for i := time_2;i > 0;i -- {hour := i/3600minute := (i - 3600 * hour)/60second := i - hour * 3600 - minute * 60timeStr := fmt.Sprintf("%02d:%02d:%02d",hour,minute,second);fmt.Print(timeStr);time.Sleep(time.Duration(1)*time.Second);fmt.Print("\r");}fmt.Println("主人,该起来敲代码了!");
}
运行结果:
欢迎各位大佬评论,指出上述代码中存在的问题。