讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用 Python 实现基于双数组时间点的嵌套蜂鸣报警系统

老雪大大_6812

老雪大大_6812

发布时间:2026-01-18 14:47:02

|

914人浏览过

|

来源于php中文网

原创

如何用 Python 实现基于双数组时间点的嵌套蜂鸣报警系统

本文介绍一种简洁可靠的 python 实现方式:通过统一计时器轮询两个独立时间数组,在指定秒数触发差异化蜂鸣(如单响/双响),避免嵌套循环逻辑错误,确保所有报警严格同步于同一主时钟。

在开发定时提醒类功能(如番茄钟、分段学习提示或工业节拍报警)时,常需根据多组预设时间点触发不同行为。本例中,timer_1 数组定义单次蜂鸣时刻(如 [10, 20, 30] 秒),timer_2 定义需连续两次短蜂鸣的时刻(如 [15, 25, 35] 秒)。关键在于:所有报警必须共享同一递增的全局时间基准,而非分别遍历数组——否则极易因循环嵌套、条件误判导致漏报、重复或阻塞。

原始代码中 for i in timer_1 and timer_2 存在根本性误解:and 在此处返回的是后一个列表对象(即 timer_2),而非两数组的并集或交集;且内层 while 循环与外层 for 混用,使 alarm 计数逻辑混乱,无法正确对齐真实流逝时间。

✅ 正确思路是:

  • 统一计时主线程:使用单个 while 循环从 0 递增至所有报警时间的最大值(max(timer_1 + timer_2));
  • 每秒实时判定:在每次 sleep(1) 后检查当前秒数 alarm 是否存在于任一数组中;
  • 差异化响应:若在 timer_1 中,播放一次长蜂鸣(1500ms);若在 timer_2 中,则连续播放两次短蜂鸣(各500ms),自然形成“嵌套报警”效果。

以下是优化后的完整可运行代码:

python学习
python学习

Python 编程学习助手 skill,面向零基础用户。 当用户表达以下意图时触发: - 学习 Python 基础概念(变量、数据类型、循环、函数、类等) - 请求 Python 练习题或测验 - 请求审查或调试 Python 代码 - 请求 Python 项目实战指导(爬虫、数据分析、Web 开发等入门项目) - 泛化表述如"教我 Python""我想学编程""Python 怎么写""帮我学 Python" 此 skill

下载

立即学习“Python免费学习笔记(深入)”;

import time
import datetime
import winsound

def sound_alarms(timer_1, timer_2):
    alarm = 0
    # 确定计时终点:覆盖所有报警点
    maximum_value = max(timer_1 + timer_2)

    while alarm <= maximum_value:
        # 格式化显示剩余倒计时(或已过时间)
        elapsed = datetime.timedelta(seconds=alarm)
        print(f"⏱️  已运行: {elapsed}", end="\r")

        time.sleep(1)
        alarm += 1

        # 检查是否命中 timer_1 的报警点 → 单次长音
        if alarm in timer_1:
            print(f"\n? Alarm 1 triggered at {alarm}s → 1 beep")
            winsound.Beep(234, 1500)  # 频率234Hz,持续1.5秒

        # 检查是否命中 timer_2 的报警点 → 双次短音(模拟“嵌套”节奏)
        if alarm in timer_2:
            print(f"\n? Alarm 2 triggered at {alarm}s → 2 beeps")
            winsound.Beep(234, 500)
            time.sleep(0.2)  # 短暂间隔,确保两次蜂鸣可分辨
            winsound.Beep(234, 500)

# 示例调用
timer_1 = [10, 20, 30]
timer_2 = [15, 25, 35]
sound_alarms(timer_1, timer_2)

? 注意事项与增强建议:

  • winsound.Beep() 仅适用于 Windows 系统;跨平台项目可替换为 playsound 库播放 .wav 文件;
  • 实际应用中建议添加异常处理(如 try/except 捕获 KeyboardInterrupt 支持手动终止);
  • 若时间数组较大或精度要求高(毫秒级),应改用 time.time() 时间戳比对,避免 sleep(1) 的累积误差;
  • 可扩展支持更多报警类型(如 timer_3 三连音)、自定义频率/时长,或集成 GUI 进度条提升用户体验。

该方案以极简逻辑实现清晰的时间调度语义,是构建多级定时提醒系统的可靠基础。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

354

2023.09.25

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4238

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3259

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2818

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1488

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2579

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3290

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1617

2023.08.10

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn