2017-02-21 9 views
0

Rubyでのコード作成を始めたばかりで、最初のスクリプトで困っています。アイデアは、英字をモールス符号に翻訳することです。変数の出力に空白を追加する - 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(' ') 
#=> ".- -... -..." 

参考:

EDIT:

あなたが欠けていた唯一の事を仕事にあなたの最初のコードを作るためには、補間を使用して追加するのは簡単ですスペース、次のとおりです。あなたが補間について知らなかった場合

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

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

- ここではそれがどのように動作するかです:

FOO = 'bar' に "#{FOO}" #=> "バー" "こんにちは私は#{FOO}" #=> "こんにちは私はバー"

は、だからあなたのケースに戻って、以下のすべてが

"#{alpha} " 

はあなたが必要なの後にスペースを追加していません。問題は、結果の文字列に最後に余分なスペースがあることを解決しました。

code.rstrip 
+0

手入れが行き届いていますか?これは彼のコード__at all__のようには見えません:) –

+0

@SergioTulentsevが実際にやったことはありません。 –

+0

ええ、本当はそうではありません:)このマップの概念は初心者が理解するのが難しいです。だからあなたの説明は、DaftVaderにとって何の意味もありません。私が答えるならば、私は彼のコードを取って、説明と出力などを使って段階的に変換します。 –

関連する問題