2013-08-28 74 views
0

我是一個開發者訓練營的學生,在和我的一個項目的問題。我們使用Ruby來編寫豬拉丁文頁面。我得到它通過測試,直到它需要接受多個單詞的點:可以追加基於if語句條件數組中的特定元素?

def pig_latina(word) 
    # univeral variables 
vowels = ['a','e','i','o','u'] 
user_output = "" 
    # adds 'way' if the word starts with a vowel 
    if vowels.include?(word[0]) 
    user_output = word + 'way'  
    # moves the first consonants at the beginning of a word before a vowel to the end 
    else 
    word.split("").each_with_index do |letter, index| 

     if vowels.include?(letter) 
     user_output = word[index..-1] + word[0..index-1] + 'ay' 
     break 
     end 
    end 
    end 
    # takes words that start with 'qu' and moves it to the back of the bus and adds 'ay' 
    if word[0,2] == 'qu' 
    user_output = word[2..-1] + 'quay' 
    end 
    # takes words that contain 'qu' and moves it to the back of the bus and adds 'ay' 
    if word[1,2] == 'qu' 
    user_output = word[3..-1] + word[0] + 'quay' 
    end 
    # prints result 
    user_output 
end 

我不知道該怎麼做。這不是功課或任何東西。我試過

words = phrase.split(" ") 
    words.each do |word| 
    if vowels.include?(word[0]) 
     word + 'way' 

但我認爲else聲明搞得一團糟。任何有識之士將不勝感激!謝謝!!

+2

你的代碼是非常複雜的理解。而是告訴我們你想要的樣本串和預期輸出.. –

+1

什麼是你的問題?我在底部代碼部分沒有看到else語句。 – squiguy

+1

你的代碼混合了一些東西。您的總體分裂短語,單詞,將每個單詞,然後再結合的邏輯,正確的是(你可以用'phrase.split(「‘){.collect | W | pig_latina(W)}。加入(’」)' )。但是,處理這個詞的詳細代碼幾乎試圖處理短語,但不完全。您可能需要在每個「qu」個案之前都有一個「else」,因爲它們與前兩種情況相互排斥。其餘的看起來有點凌亂,但我認爲是健全的。 – lurker

回答

1
def pig_latina(word) 
    prefix = word[0, %w(a e i o u).map{|vowel| "#{word}aeiou".index(vowel)}.min] 
    prefix = 'qu' if word[0, 2] == 'qu' 
    prefix.length == 0 ? "#{word}way" : "#{word[prefix.length..-1]}#{prefix}ay" 
end 

phrase = "The dog jumped over the quail" 
translated = phrase.scan(/\w+/).map{|word| pig_latina(word)}.join(" ").capitalize 

puts translated # => "Ethay ogday umpedjay overway ethay ailquay" 
+0

感謝修正,PJS :) – tigeravatar

+0

謝謝!這有助於對事物進行透視。 –

1

我想你的邏輯分離成兩種不同的方法,轉換一個字(有點像你)一個方法,並採取了一句,分裂的話,並在調用前一種方法對每個人的另一種方法。這可能是這樣的:

def pig(words) 
    phrase = words.split(" ") 
    phrase.map{|word| pig_latina(word)}.join(" ") 
end