В настоящее время я выполняю учебник rspec Test First и задаю вопрос, связанный с проблемой Pig_Latin.Ruby: String Ranges in a Pig Переводчик латинского языка
В частности, я хочу знать о диапазонах строк. Вот часть моего кода:
if phonemes.include?(word[0]) && phonemes.include?(word[1]) && phonemes.include?(word[2])
<do something>
end
Вместо выше я попытался:
if phonemes.include?(word[0..2]) # i added that character to the list of phonemes
<do something> # e.g. if the word is school i added "sch" to
end # the array called phonemes
Однако это не работает, даже "sch"
в phonemes
и word[0..2] == "sch"
Мой вопрос почему не могу ли я использовать диапазоны строк для управления результатом. (Я отправлю свой полный код в нижней части в случае, если это неясно)
кода (работа в процессе):
def translate(string)
array = string.split(" ")
alphabet = ("a".."z").to_a
vowels = ["a", "e", "i", "o", "u"]
phonemes = alphabet - vowels
phonemes << ["qu", "sch", "thr"]
result = []
array.each do |word|
if vowels.include?(word[0])
result << (word + "ay")
elsif phonemes.include?(word[0..1])
result << "do something"
elsif phonemes.include?(word[0]) && phonemes.include?(word[1]) && phonemes.include?(word[2])
result << (word[3..-1] + (word[0..2] + "ay"))
elsif phonemes.include?(word[0]) && phonemes.include?(word[1])
result << (word[2..-1] + (word[0..1] + "ay"))
elsif phonemes.include?(word[0..1])
result << "do something else"
elsif phonemes.include?(word[0])
result << (word[1..-1] + (word[0]+ "ay"))
end
end
return result.join(" ")
end
Как всегда советы, чтобы сделать код более эффективным было бы оценено (но наиболее для меня важно понять, почему строки строк не работают). Спасибо.
Удивительный! Это отлично, спасибо вам большое! –