2017-02-21 97 views
0

我justed开始学习的Ruby代码,并打了我的第一个剧本给划破了。这个想法是把英文字母翻译成莫尔斯电码。添加空白给一个变量的输出 - 红宝石

我已经建立了我的信及其相应的值的哈希:

morse_code = { 
'a' => '.-', 
'b' => '-...', 
etc etc 

我用下面通过哈希迭代和拉基于输入然后输出相应的值是:

print "What would you like to translate: " 
code = gets.strip.downcase 
morse_code.each do |morse, alpha| 
    code.gsub!(morse, alpha) 
end 

puts code 

的问题是,我的输出不包含间距,以便看起来是这样的:

......-...-..---- 

,而不是我想要的东西:

.... . .-.. .-.. --- - 

所有我发现迄今是与调用字符串中的变量时,增加一个空格。下面是一个例子:

Putting space between the output of defined variables in Ruby

我如何能与我当前的代码实现这一目标或重写相应将不胜感激任何帮助。

回答

1

你需要的是采取输入和字符映射到从morse_code哈希相应的值,然后用空格加入吧:

code = 'abb' 
code.each_char.map { |letter| morse_code[letter] }.join(' ') 
#=> ".- -... -..." 

参考:

编辑:

为了让您最初的代码工作,你缺少的仅仅是一个空间,这是容易的添加使用插值:

code = 'abab' 
morse_code.each do |morse, alpha| 
    code.gsub!(morse, "#{alpha} ") # <============= 
end 

code 
#=> ".- -... .- -... " 
code.rstrip 
#=> ".- -... .- -..." 

如果你不知道的插值没有 - 这里是如何工作的:

富= '酒吧' “#{FOO}” #=> “栏” “你好,我是#{FOO}” #=> “你好,我是吧”

所以回到你的情况下,所有下面确实

"#{alpha} " 

被加入后的空间,你需要的。与它的问题,结果字符串将有一个额外的空间,我们解决了与

code.rstrip 
+0

注意详细说明吗?这看起来并不像他的代码__at all__ :) –

+0

@SergioTulentsev实际上只是做了:) –

+0

是的,但不是真的:) map'的'这个概念是很难新手掌握,我发现。所以你的解释对DaftVader来说可能并不意味着什么。如果我要回答,我会把他的代码和步骤一步一步地进行转换,解释和输出等。 –