-1

こんにちは、文字列を豚ラテン語に変換するためのコードを書こうとしています

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

  if vowels.include?(str[0])
     str + 'ay'
  elsif str[0..1] == 'qu'
     str[2..-1]+'quay' 
  elsif consonants.include?(str[0]) && str[1..2]=='qu'
     str[3..-1]+str[0..2]+'ay' 
  elsif consonants.include?(str[0]) &&    consonants.include?(str[1]) && consonants.include?(str[2])
  str[3..-1] + str[0..2] + 'ay'
 elsif consonants.include?(str[0]) && consonants.include?(str[1])
   str[2..-1] + str[0..1] + 'ay'
elsif consonants.include?(str[0])
   str[1..-1] + str[0] + 'ay'
 elsif str[0..1] == 'qu'
 str[2..-1]+'quay'
else

  return str
  end
 end

このコードは、translate("monkey") のように、1 つの単語の文字列を変換するのに最適です。私がやろうとしているのは、このコードが(同じ文字列内で)複数の単語を受け入れることを可能にすることです...豚のラテン語に変換するための上記の基準に従います。例: translate("please help") => 「イーズプレイ エルフェイ」

どうもありがとう!

4

2 に答える 2

0

1つの単語を翻訳する方法をすでに知っているので、タスクを2つの方法に分割してみませんか。

def translate(str)
  str.split.map { |word| translate_word(word) }.join
end

def translate_word(str)
  # Your old translate code here
end
于 2013-02-11T04:59:36.037 に答える
0

このために私がすることは次のとおりです。

#split メソッドを使用して、str 変数を単語の配列 (または 1 単語のみの場合は 1 単語) にします。

その後、array#each メソッドを使用して、各配列インデックスを反復処理できます。すなわち

str = "hello"
str = str.split(" ") # str now equals ["hello"]

複数の変数の場合:

str = "hello world"
str- str.split(" ") #now equals ["hello", "world"]

次に、.each メソッドを使用できます。

str.each do |<variable name you want to use>| 
   <how you want to manipulate the array>
   end

豚のラテンプログラムの場合、次のことができます。

str.each do|element| 
  if vowels.include?(element)
    <do whatever you want here>
  elsif
    <do whatever>
  else 
    <do whatver>
  end
end

これは、配列内の各要素を反復処理して変換します (要素が 1 つしかない場合でも機能します)。

于 2013-10-01T22:15:43.480 に答える