我仍在努力完成一些练习,我确信这不是第一次在堆栈中提出这个问题......但我有兴趣以我希望的方式解决这个问题解释以编写代码,因此我希望得到一些帮助来弄清楚如何使我的方法起作用。
这是拉丁 pig :) 基本上。如果你在变量中输入一个词......或两个词,它应该将这些词翻译成所谓的 pig 拉丁语。 Pig latin 将 hello 之类的词改为 ellohay。在 pig 拉丁语中,单词必须以元音开头。所以你甚至可以用“closed”这个词,它应该是“osedclay”。我决定用一个 while 循环来解决这个问题。虽然我的 rspec 检查适用于前两次检查......当它开始检查第三个单词(恰好是“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
最佳答案
!=
运算符并不像您想象的那样工作。
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"
关于ruby - 为什么我的 while 循环卡住了?我忘记了一步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18621569/