我正在尝试解决Test-First Ruby 课程中的“猪拉丁问题”。
在这个程序中,我基本上试图用以下规则翻译一个字符串:
- 如果单词以元音开头,则在单词末尾添加“ay”。
- 如果单词以辅音开头,请将其移至单词末尾,然后在单词末尾添加“ay”音。
为此,我编写了以下运行良好的代码:
def translate(word)
words=word.split(" ")
words.each do |x|
if ["a","e","i","o","u"].include?x[0,1]
x << ("ay")
else
x << ("#{x[0,1]}ay")
x[0,1]=""
end
end
words.join(" ")
end
但是,问题还指出,在翻译开头有2个或3个辅音的单词时,应该将它们全部移到单词的末尾,然后加上“ay”。
为此,我在语句中结束了一个until
循环:else
def translate(word)
words=word.split(" ")
words.each do |x|
if ["a","e","i","o","u"].include?x[0,1]
x << ("ay")
else
until ["a","e","i","o","u"].include?x[0,1]
x << ("#{x[0,1]}")
x[0,1]=""
end
x << ("#{x[0,1]}ay")
end
end
words.join(" ")
end
这给了我这个结果:
translate("the bridge over the river kwai")
=> "etheay idgebriay overay etheay iverriay aikwaay"
因此,它会until
额外运行一次循环,并将单词中的第一个元音也添加到末尾。但是,它不会从第一个位置删除这个元音。
我究竟做错了什么?