2017-02-21 2 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 = 'бар' "# {Foo}" # => "бар" "привет Я # {Foo}" # => "привет Я-бар"

Так возвращаясь к вашему делу, все следующие делает

"#{alpha} " 

добавляет пробел после, что вам необходимо. Проблема с этим, что итоговая строка будет иметь дополнительное пространство в конце, которое мы решили с

code.rstrip 
+0

Уход за разработкой? Это не похоже на его код __at all__ :) –

+0

@SergioTulentsev на самом деле просто сделал :) –

+0

Да, но не совсем :) Эта концепция «карты» для новичков трудно понять, я нашел. Поэтому ваше объяснение может очень ничего не значить для DaftVader.Если бы я должен был ответить, я бы взял его код и преобразовал его поэтапно, с объяснениями и выводами и т. Д. –

 Смежные вопросы

  • Нет связанных вопросов^_^