Python、Java、JavaScript、C、Go等编程语言如何实现“定时器”功能

news2024/11/26 10:28:22

这是CSDN平台2月推出的一个活动(活动链接为:CSDN 征文活动),聊聊时间的话题,小编我也不知道有什么好聊的时间的话题,看了CSDN给出的部分话题上,有一个这样的话题,如何用各种编程语言实现“定时器”,觉得这个不错,于是就写了这篇博文。

1. “定时器”原理

首先,小编讲述一下小编实现的“定时器”原理,利用到转义字符,主要使用的转义字符为:\r,在window系统,它表示:\r:回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖(光标在该行的头部),小编基于这个原理,从而动态显示“定时器”上秒、分、时数的变化。当然,这个代码也是存在一定问题的,如果读者的电脑是其他系统的,下述代码运行结果可能会有一定问题喔!(如:在Mac中,\r表示换行)。另外,小编实现的“定时器”除了Python外,其他实现的编程语言都没有添加提示功能(就是到点时,播放一个音频文件)。

下面是运用几种常见的编程语言实现“定时器”功能(就比如午睡吧!从某时刻程序开始运行,到程序结束时提醒用户该起来敲代码了)。

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("主人,该起来敲代码了!");
}

运行结果:
请添加图片描述
欢迎各位大佬评论,指出上述代码中存在的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识SpringSpring核心容器

初识Spring Spring生态&#xff1a; Spring FrameWork发展&#xff1a; Spring FrameWork系统架构&#xff1a; Spring FrameWork学习路线&#xff1a; Spring核心概念 Ioc DI 实现IoC 1、导入Spring坐标 2、定义Spring管理的类&#xff08;接口&#xff09; 3、创建spring配…

tensorflow 学习笔记(三):神经网络八股

本节内容&#xff1a; 前两节使用 Tensorflow2 的原生代码大叫神经网络。本节使用 keras 搭建神经网络&#xff08;八股&#xff1a;六步法&#xff0c;有 Sequential 和 class 两种&#xff09;。 文章目录一、搭建网络八股 sequential1.1、keras 介绍1.2、六步法搭建 keras …

Mac搭建appium+python+Android自动化环境

mac搭建appium+python+Android自动化环境 一、安装jdk二、安装Android-SDK三、配置 Android 环境四、安装Appium五、打开appium一、安装jdk 自己百度 二、安装Android-SDK 1)下载地址: http://www.android-studio.org/index.php/download 下载mac版本的dmg 2) 下载完成后…

HTTPS:让数据传输更安全

鉴于 HTTP 的明文传输使得传输过程毫无安全性可言&#xff0c;且制约了网上购物、在线转账等一系列场景应用&#xff0c;于是引入加密方案。 从 HTTP 协议栈层面来看&#xff0c;我们可以在 TCP 和 HTTP 之间插入一个安全层&#xff0c;所有经过安全层的数据都会被加密或者解密…

关于虚拟数字人你想知道的都在这里

2022年底&#xff0c;微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红&#xff0c;5天用户量超百万&#xff0c;在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业&#xff0c;AI虚拟数字人就是其中之一&#xff0c;一个随着元宇…

损失函数与反向传播

一、损失函数计算实际输出和目标之间的差距为我们更新输出提供一定的依据&#xff08;反向传播&#xff09;1.nn.L1Lossimport torch from torch.nn import L1Loss inputs torch.tensor([1,2,3],dtypetorch.float) targets torch.tensor([1,2,5],dtypetorch.float) # reshape…

Docker之路(4.Docker命令大全、docker镜像命令、docker容器命令以及docker常用命令)

1.帮助命令 1.1 docker version(显示docker的版本信息) sudo docker version1.2 docker info(显示docker的系统信息&#xff0c;包括镜像和容器数量) sudo docker info1.3 --help (万能命令) sudo 命令 --help1。4 帮助文档的地址 https://docs.docker.com/engine/referenc…

纯手动搭建hadoop3.x集群记录001_搭建虚拟机_调通网络_配置静态IP_安装JDK---大数据之Hadoop3.x工作笔记0162

1.首先准备机器,172.19.126.115 172.19.126.116 172.19.126.117 我准备了3台 Windows机器 2.然后我打算在Windows机器上使用虚拟机,搭建3台Centos虚拟机来进行安装hadoop 3.这里我们的3台windows机器中的,3台linux虚拟机也使用了3个IP,分别是 172.19.126.120 172.19.126.1…

自然语言处理(NLP)之跳字(元)模型<skip-gram>与连续词袋模型<continuous bag of words>

自然语言处理(Natural Language Processing, NLP)是AI里的一个非常重要的领域&#xff0c;比如现在很火爆的ChatGPT&#xff0c;首先就需要很好的理解输入内容的意思才能够做出合理的回复。自然语言处理应用非常广泛&#xff0c;比如机器翻译、问题回答、文本语义对比、语音识别…

整合Swagger2

整合Swagger2 1、Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 1、及时性 (接口变更后&#xff0c;能够及时准确地通知相关前后端开发人员…

Java企业开发学习笔记(4)采用Java配置类管理Bean

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/1fwEO】 文章目录一、采用Java配置类管理Bean1.1 创建子包1.2 创建杀龙任务类1.3 创建勇敢骑士类1.4 创建Spring配置类1.5 创建测试类1.6 运行测试类二、课堂练习2.1 创建救美任务类和救美骑士类2…

BERT模型系列大全解读

前言 本文讲解的BERT系列模型主要是自编码语言模型-AE LM&#xff08;AutoEncoder Language Model&#xff09;&#xff1a;通过在输入X中随机掩码&#xff08;mask&#xff09;一部分单词&#xff0c;然后预训练的主要任务之一就是根据上下文单词来预测这些单词&#xff0c;从…

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法&#xff0c;如SSD和YOLO等虽然实现了实时的速度&#xff0c;但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢&#xff1f;何凯明等人将其归咎于正、负样本的不平衡&#xff0c;并基于此提出了新的损失函数Focal L…

JUC并发编程(上)

✨作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 学习地址 写在最前 JUC&#xff08;Java Util Concurrent&#xff09;学习内容框架&#xff1a; #mermaid-svg-r5jN6ICeVruSjU0I …

MySQL一隐式转换

我相信90%以上的同学们在平时开发时&#xff0c;或多或少都被隐式转换&#xff08;CONVERT_IMPLICIT&#xff09;坑过&#xff0c;甚至测出bug前你都浑然不知。你还别不信&#xff0c;“无形之刃&#xff0c;最为致命&#xff01;” mysql> SELECT * from t_user; ---------…

【LeetCode】剑指 Offer 11. 旋转数组的最小数字 p82 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/ 1. 题目介绍&#xff08;11. 旋转数组的最小数字&#xff09; 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 给你一个可能存在 重复 元素值…

关于微前端,你想知道的都在这!

更多请关注微前端专题 https://codeteenager.github.io/Micro-Frontends/ 介绍 微前端官网&#xff1a;https://micro-frontends.org/ 问题&#xff1a;如何实现多个应用之间的资源共享&#xff1f; 之前比较多的处理方式是npm包形式抽离和引用&#xff0c;比如多个应用项目之…

浅谈Redisson实现分布式锁的原理

1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一&#xff0c;而 Java 是世界上最流行&#xff08;注意&#xff0c;我没有说“最好”&#xff09;的编程语言之一。虽然两者看起来很自然地在一起“工作”&#xff0c;但是要知道&#xff0c;Redis 其实并没有对 Java…

windows共享文件夹(目录)(SMB服务)

SMB服务&#xff0c;文件共享服务&#xff0c;俗称文件夹&#xff08;目录&#xff09;、打印机等共享 一、创建共享用户 windos系统中&#xff0c;文件夹共享需要设置指定用户与密码&#xff0c;通过输入用户和密码进行连接&#xff0c;在设置共享时系统中有Everyone所有人设…

【Linux学习笔记】1.Linux 简介及安装

前言 本章介绍Linux及其安装方法。 Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多…