我正在编写测试文件,但我无法通过第二次测试,这里:
def translate(word)
if word.start_with?('a','e','i','o','u')
word << "ay"
else
word << "bay"
end
end
start_with?
是正确的方法吗?
describe "#translate" do
it "translates a word beginning with a vowel" do
s = translate("apple")
s.should == "appleay"
end
it "translates a word beginning with a consonant" do
s = translate("banana")
s.should == "ananabay"
end
it "translates a word beginning with two consonants" do
s = translate("cherry")
s.should == "errychay"
end
end
编辑: 我的解决方案不完整。 我的代码只通过第一次测试,因为我能够将“ay”推到单词的末尾。通过第二次测试我错过的是删除第一个字母,如果它的辅音,在“香蕉”中是“b”。
答案 0 :(得分:5)
您也可以这样做:
word << %w(a e i o u).include?(word[0]) ? 'ay' : 'bay'
在你的情况下使用正则表达式可能有点过分,但如果你想匹配更复杂的字符串,可能会很方便。
答案 1 :(得分:1)
如果单词也以辅音开头,看起来你要移除第一个字符,所以:
if word.start_with?('a','e','i','o','u')
word[0] = ''
word << 'ay'
else
consonant = word[0]
word << "#{consonant}ay"
end
答案 2 :(得分:1)
word << word[0].match(/a|e|i|o|u/).nil? ? 'bay' : 'ay'
答案 3 :(得分:1)
您的代码意味着: 如果单词以('a','e','i','o','u')开头,则在末尾添加“ay” 否则在最后添加“bay”。
第二次测试将是“bananabay”而不是“ananabay”(以b作为第一个字母)
答案 4 :(得分:1)
def translate(word)
prefix = word[0, %w(a e i o u).map{|vowel| "#{word}aeiou".index(vowel)}.min]
"#{word[prefix.length..-1]}#{prefix}ay"
end
puts translate("apple") #=> "appleay"
puts translate("banana") #=> "ananabay"
puts translate("cherry") #=> "errychay"
答案 5 :(得分:0)
以下代码通过了所有测试......
def translate(word)
if word.start_with?('a','e','i','o','u')
word<<'ay'
else
pos=nil
['a','e','i','o','u'].each do |vowel|
pos = word.index(vowel)
break unless pos.nil?
end
unless pos.nil?
pre = word.partition(word[pos,1]).first
word.slice!(pre)
word<<pre+'ay'
else
#code to be executed when no vowels are there in the word
#eg words fry,dry
end
end
end
答案 6 :(得分:0)
想通了我的第一份心血! 祝你好运!
def method(word)
word[0].eql?("A" || "E" || "I" || "O" || "U")
end