1

私はまだいくつかの演習に取り組んでおり、この質問がスタックに持ち込まれたのはこれが初めてではないと確信しています...しかし、私が解釈して書く方法でこの質問を追求することに興味がありますコードなので、私のアプローチを機能させる方法を理解するのに役立つと思います.

それは豚のラテン語です:) 基本的に。変数に 1 つまたは 2 つの単語を入力すると、それらの単語は豚ラテン語と呼ばれるものに変換されます。Pig Latin は、hello のような単語を ellohay に変更します。豚ラテン語では、単語は母音で始まる必要があります。したがって、「closed」という単語を使用することもでき、「osedclay」と表示されます。while ループでこれにアプローチすることにしました。私の rspec チェックは最初の 2 つのチェックで機能しますが、3 番目の単語 (たまたま「cherry」) のチェックを開始すると、無限ループに陥ってしまうようです。

誰か考えますか?

def translate(word)
separated = word.split("")
while separated[0] !=("a" || "e" || "i" || "o" || "u")
    letter = separated.shift
    separated << letter
    separated
end
    word = separated.join("")
    word + "ay"
end
4

1 に答える 1

4

!=演算子は、あなたが思っているようには機能しません。

while separated[0] !=("a" || "e" || "i" || "o" || "u")

上記の行は次と同等です

while separated[0] != 'a'

あなたの言葉に「a」がない場合、ループは無限です。条件を書き換える必要があります

while !'aeiou'.include?(separated[0])

わかりました、正規表現を使用します...

これは、メソッドのやや短いバージョンです

def translate(word)
  # you can make one-liner out of it.
  leading_consonants_regex = /^([bcdfghjklmnpqrstvwxyz]+)(.*)/
  word.sub(leading_consonants_regex, '\\2\\1ay')
end

translate('sheep') # => "eepshay"
translate('dog') # => "ogday"
translate('closed') # => "osedclay"
translate('cherry') # => "errychay"
于 2013-09-04T18:54:59.857 に答える