2013-01-13 59 views
3

我正在創建一個紅寶石拉丁翻譯器。它適用於大多數單詞,但我一次無法使用多個單詞處理一些問題。因此,例如,當您只是輸入「蘋果」一詞時,就會得到「appleay」,但如果輸入了多個單詞,則不會翻譯它們。我一直在尋找解決辦法,但已經空了。這裏的其他一些線索對於讓我走得這麼遠真的很有幫助。任何提示將非常感謝。紅寶石豬拉丁語翻譯多詞

我還在if/else語句中添加了一些例外,以允許「quiet」和「square」的正確豬拉丁語翻譯,其中「qu」被認爲是輔音。

在此先感謝您的幫助!

def translate (word) 
    alpha = ('a'..'z').to_a 
    vowels = %w[a e i o u] 
    consonants = alpha - vowels 

    if vowels.include?(word[0..0]) 
    word + 'ay' 
    elsif consonants.include?(word[0..0]) && consonants.include?(word[1..1]) 
    word[2..-1] + word[0..1] + 'ay' 
    elsif word[0..1] == "qu" 
    word[2..word.length]+"quay" 
    elsif word[0..2] == "squ" 
    word[3..word.length]+"squay" 
    else consonants.include?(word[0]) 
    word[1..-1] + word[0..0] + 'ay' 
    end 

end 

回答

1

你可以這樣做:

Alpha = ('a'..'z').to_a 
Vowels = %w[a e i o u] 
Consonants = Alpha - Vowels 

def translate(word) 
    if Vowels.include?(word[0]) 
    word + 'ay' 
    elsif Consonants.include?(word[0]) && 
    Consonants.include?(word[1]) 
    word[2..-1] + word[0..1] + 'ay' 
    elsif word[0..1] == "qu" 
    word[2..-1]+"quay" 
    elsif word[0..2] == "squ" 
    word[3..-1]+"squay" 
    else Consonants.include?(word[0]) 
    word[1..-1] + word[0..0] + 'ay' 
    end 
end 

puts "Enter some text to translate" 
text = fgets 
puts text.split.map(&method(:translate)).join(' ') 
+0

我會在哪裏放置該代碼以獲得正確的結果?把它放在if/else語句之前或之後會給我一個「堆棧層太深」的錯誤。 – PaperKraftMike

+0

您可以將它放在方法主體之外(即在程序的最後一行),變量'text'是一個包含要翻譯的輸入單詞的字符串。 – user2398029

+0

那麼在方法的最後一個「結束」之前呢?而對於「文本變量,它應該保持原樣?我需要從那裏直接輸入方法嗎? – PaperKraftMike

0

怎麼樣將它分解爲多個方法?即將字符串分解爲單詞,然後將這些單詞發送給另一個方法進行翻譯,然後將它們連接在一起並給出輸出。

def translator(sentence) 
    words_to_translate = sentence.split(" ") 
    translated_words = words_to_translate.map {|word| translate_word(word)} 
    translated_sentence = translated_words.join(" ") 
end 

def translate_word(word) 
    ...code here 
    return a word 
end