1

我仍在努力完成一些练习,我确信这不是第一次在堆栈上提出这个问题......但我有兴趣以我会解释为写作的方式来追求这个问题代码,所以我希望得到一些帮助来弄清楚如何使我的方法起作用。

这是猪拉丁语:) 基本上。如果你在变量中输入一个词......或两个词,它应该将这些词翻译成所谓的猪拉丁语。Pig latin 使用 hello 之类的词并将其更改为 ellohay。在猪拉丁语中,单词必须以元音开头。所以你甚至可以有“关闭”这个词,它应该说“osedclay”。我决定用一个while循环来解决这个问题。虽然我的 rspec 检查适用于前两个检查...当它开始检查第三个单词(恰好是“樱桃”)时,它似乎陷入了无限循环

有人想吗?

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 回答