0

私は開発者ブートキャンプの学生で、自分のプロジェクトの 1 つに問題がありました。Ruby を使用して Pig Latin ページをコーディングしています。複数の単語を受け入れる必要があるポイントまで、テストに合格しました。

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声明がすべてを台無しにしていると思います。どんな洞察も大歓迎です!ありがとう!!

4

2 に答える 2

1

私はあなたのロジックを2つの異なる方法に分けます.1つの単語を変換する方法(あなたが持っているようなもの)と、文を取得して単語を分割し、それぞれの前の方法を呼び出す別の方法です。次のようになります。

def pig(words)
  phrase = words.split(" ")
  phrase.map{|word| pig_latina(word)}.join(" ")
end
于 2013-08-28T20:40:48.593 に答える
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"
于 2013-08-28T20:54:07.053 に答える