如何编写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
相关产品推荐
相关产品推荐

