You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Ruby方法实现摩尔斯码到数字的转换?

问题原因
  • 正则表达式错误:你使用的/\w/仅能匹配字母、数字、下划线,而摩尔斯码由.和-组成,完全匹配不到目标内容,自然替换失效。
  • 哈希键类型错误:你写的'.----': '1'语法在Ruby中会生成**符号(Symbol)**类型的键,但输入的摩尔斯码是字符串类型,键类型不匹配会导致查询不到对应值。
  • 逻辑冗余混乱:方法参数morse_code完全未被使用,还混用了不必要的实例变量@converted,输入读取和转换逻辑耦合在一起,不利于调试。
修复后的可运行代码
# 数字转摩尔斯码的原始哈希,可复用原有定义
DIGIT_TO_MORSE = {
  "1" => ".----",
  "2" => "..---",
  "3" => "...--",
  "4" => "....-",
  "5" => ".....",
  "6" => "-....",
  "7" => "--...",
  "8" => "---..",
  "9" => "----.",
  "0" => "-----"
}
# 直接翻转键值生成摩尔斯转数字的哈希,无需手动重写避免出错
MORSE_TO_DIGIT = DIGIT_TO_MORSE.invert

# 摩尔斯码转数字方法
def morse_to_digit(input_str)
  # 按空格分割每个独立的摩尔斯字符,逐个查表后拼接结果
  input_str.split.map { |morse| MORSE_TO_DIGIT[morse] }.join
end

# 调用示例
puts "请输入空格分隔的数字摩尔斯码:"
user_input = gets.chomp
puts "转换结果:#{morse_to_digit(user_input)}"
补充说明
  • 数字对应的摩尔斯码固定为5位,如果你输入的是无空格分隔的连续摩尔斯码,可以把转换逻辑修改为input_str.gsub(/[.-]{5}/, MORSE_TO_DIGIT),即可直接匹配连续的5位摩尔斯单元完成转换。
  • 已剥离输入读取和转换逻辑,复用性更强,也避免了原有代码中方法内读取输入、变量作用域混乱的问题。

内容的提问来源于stack exchange,提问作者lucatero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:39:02