求助:摩尔斯电码转英文时处理无效符号的正确解决方案
摩尔斯电码转英文:处理无效编码为
*的解决方案 问题背景
需求为将摩尔斯电码转换为英文,需保留字母与单词间的特定空格(字母间无空格,单词间用两个空格分隔);当存在无法转换的编码符号时,需将其显示为*。例如输入- .... .. ....... - . .- --,期望输出thi* team。
原代码存在两个核心问题:
- 字典定义为
eng_dict,但循环中错误使用未定义的morse_eng_dict,会触发NameError - 未实现无效编码替换为
*的逻辑,且嵌套循环的写法效率低下
修正后的完整代码
eng_dict = {'.-': 'a', '-...': 'b', '-.-.': 'c', '-..': 'd', '.': 'e', '..-.': 'f', '--.': 'g', '....': 'h', '..': 'i', '.---': 'j', '-.-': 'k', '.-..': 'l', '--': 'm', '-.': 'n', '---': 'o', '.--.': 'p', '--.-': 'q', '.-.': 'r', '...': 's', '-': 't', '..-': 'u', '...-': 'v', '.--': 'w', '-..-': 'x', '-.--': 'y', '--..': 'z', '-----': '0', '.----': '1', '..---': '2', '...--': '3', '....-': '4', '.....': '5', '-....': '6', '--...': '7', '---..': '8', '----.': '9' } nomorse = input("Enter your code here: ") nomorse_list = nomorse.split(' ') text = [] for item in nomorse_list: if item == '': # 空字符串对应输入中的单词分隔空格,直接添加空格 text.append(' ') else: # 字典get方法:找到键返回对应字符,找不到返回'*' text.append(eng_dict.get(item, '*')) # 拼接所有片段并输出结果 result = ''.join(text) print(result)
关键改动说明
- 修正字典名称错误:统一使用定义好的
eng_dict,避免未定义变量报错 - 简化查找逻辑:用字典的
get()方法替代嵌套循环,一行代码完成有效编码匹配与无效编码替换,既简洁又高效 - 优化结果收集方式:用列表
text存储转换片段,比字符串拼接更节省内存 - 明确处理单词分隔:直接将输入中的空字符串(由
split(' ')生成,对应原输入的单词间空格)转换为空格,保留原格式 - 移除冗余代码:删除无意义的
morse变量,简化逻辑结构
测试验证:输入- .... .. ....... - . .- --,将输出thi* team,完全符合需求。
内容的提问来源于stack exchange,提问作者gfffh
相关产品推荐
相关产品推荐

