2017-02-21 2 views
0

Ich habe angefangen zu lernen, in Ruby zu programmieren und habe einen Haken in meinem ersten Skript gefunden. Die Idee ist, das englische Alphabet in Morsecode zu übersetzen.Hinzufügen von Leerzeichen zur Ausgabe einer Variablen - Ruby

Ich habe einen Hash für meine Briefe und ihre entsprechenden Werte ein:

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

ich die Verwendung folgenden durch den Hash iterieren und die entsprechenden Werte bei der Eingabe basierend ziehen dann ausgegeben es:

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

puts code 

Das Problem ist, dass meine Ausgabe sieht nicht Abstand enthält, so wie folgt aus:

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

statt, was ich will:

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

Alles, was ich bis jetzt ein Leerzeichen zum Hinzufügen sind im Zusammenhang gefunden haben, wenn Variablen in einem String aufrufen. Unten ist ein Beispiel:

Putting space between the output of defined variables in Ruby

Jede Hilfe, wie ich das mit meinem aktuellen Code erreichen kann oder umschreiben entsprechend gewürdigt werden würde.

Antwort

1

Was Sie brauchen, ist die Eingabe zu übernehmen und seine Zeichen abzubilden Werte aus dem morse_code Hash zu entsprechen, und verbinden es dann mit Leerzeichen:

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

Referenz:

EDIT:

Um Ihren ursprünglichen Code machen das einzige, was zu arbeiten, ist Ihnen fehlte ein Raum, der einfach durch Interpolation hinzuzufügen:

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

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

Wenn Sie nicht über Interpolation wusste - hier ist, wie es funktioniert:

foo = 'bar' "# {foo}" # => "bar" "Hallo ich bin # {foo}" # => "Hallo ich bin bar"

Also, um Ihren Fall geht zurück, die alle die folgende tut

"#{alpha} " 

einen Raum nach dem Hinzufügen, die man benötigt. Problem damit, dass die resultierende Zeichenkette einen zusätzlichen Platz am Ende hat, den wir mit

code.rstrip 
+0

gelöst haben. Dies sieht nicht wie sein Code __at all__ :) –

+0

@SergioTulentsev eigentlich nur :) –

+0

Ja, aber nicht wirklich :) Dieses Konzept der 'Karte' ist schwer für Anfänger zu erfassen, fand ich. Deine Erklärung mag DaftVader also nichts bedeuten.Wenn ich antworten würde, würde ich seinen Code nehmen und ihn Schritt für Schritt umwandeln, mit Erklärungen und Ausgaben usw. –

Verwandte Themen