Streamlit 莫斯电码转换器学习笔记
Streamlit 莫斯电码转换器学习笔记
一、核心功能与整体结构
功能描述该程序通过 Streamlit 构建一个网页应用,实现:
- 接收用户输入的文本
- 转换为莫斯电码
- 播放对应的莫斯电码声音(点 / 划对应不同时长的蜂鸣)
整体流程
plaintext
用户输入文本 → 点击按钮 → 文本转莫斯电码 → 播放声音(可选)
二、重点知识点解析
1. Streamlit 基础应用
- 核心函数
st.title("标题"):设置页面标题st.text_input("提示文字"):创建文本输入框,返回用户输入的字符串st.button("按钮文字"):创建按钮,点击后返回True(用于触发后续逻辑)
- 交互逻辑:通过
if 按钮变量:判断按钮是否被点击,执行转换和播放操作
2. 莫斯电码映射关系
- 数据结构:使用字典
MORSE_CODE存储字符与莫斯电码的对应关系- 键:大写字母、数字、空格(空格映射为
/) - 值:对应的莫斯电码(
.表示点,-表示划)
- 键:大写字母、数字、空格(空格映射为
- 转换逻辑:
- 将输入文本转为大写(
text.upper()),确保与字典键匹配 - 遍历每个字符,从字典中获取对应电码,拼接为字符串(用空格分隔)
- 将输入文本转为大写(
3. 声音播放实现
- 依赖库:
winsound(Windows 系统专用,Linux/mac 需替换为simpleaudio) - 核心函数:
winsound.Beep(频率, 时长):播放蜂鸣音(频率单位:Hz,时长单位:ms)time.sleep(秒数):控制声音间隔
- 规则:
- 点(
.):1000Hz,200ms - 划(
-):1000Hz,600ms(时长为点的 3 倍,符合莫斯电码标准) - 空格或
/:暂停 0.4 秒
- 点(
三、难点与注意事项
跨平台兼容性问题
winsound仅支持 Windows 系统,在 Linux/mac 运行会报错- 解决方案:使用条件判断适配不同系统,例如:
python
运行
import sys if sys.platform.startswith('win'):import winsound else:import simpleaudio as sa # 需要额外安装
字符映射完整性
- 示例中
MORSE_CODE仅包含部分字符(A、B、C、D、E、空格、0、1、2),实际使用需补充完整所有字母、数字和标点的映射,否则未包含的字符会被忽略
- 示例中
输入文本处理
- 程序默认将输入转为大写(
text.upper()),但未处理特殊字符(如标点符号),需考虑是否过滤或报错提示
- 程序默认将输入转为大写(
声音播放体验
- 蜂鸣音频率和时长可调整(如频率 800Hz 更易听),间隔时间需符合莫斯电码规范(点与划间隔 1 个点长,字符间间隔 3 个点长,单词间间隔 7 个点长)
四、可扩展方向
- 补充完整的莫斯电码映射表(包含所有字母、数字、标点)
- 增加电码显示功能(在页面上展示转换后的莫斯电码字符串)
- 支持自定义频率、点 / 划时长
- 添加历史记录功能,保存过往转换记录
- 实现莫斯电码转文本的反向功能
五、核心代码总结
python
运行
# 1. 页面交互
import streamlit as st
st.title("莫斯电码发布器")
input_text = st.text_input("请输入内容")
if st.button("转换并播放"):# 2. 莫斯电码转换MORSE_CODE = {完整的映射表}morse_str = ' '.join([MORSE_CODE[c.upper()] for c in input_text if c.upper() in MORSE_CODE])# 3. 声音播放import winsound, timefor symbol in morse_str:if symbol == '.':winsound.Beep(1000, 200)elif symbol == '-':winsound.Beep(1000, 600)elif symbol in (' ', '/'):time.sleep(0.4)