【发布时间】:2017-05-29 14:06:56
【问题描述】:
我在使用 Ruby pig 拉丁语翻译器翻译 2 个或更多单词时遇到问题。我已经成功地弄清楚了如何使用我的函数 translate 翻译以元音、辅音或两个辅音开头的单词,并且我想创建第二个函数 translate_words,它将 .map 与第一个函数一起使用。
当字符串“eat pie”被提交时,输出为“eat pieay”。它只改变了第二个词,而且做错了(应该是“eatay iepay”)。我已经在 SO 上查看了多个其他解决方案,但没有运气。我对正则表达式还是很陌生,所以这些解决方案有点超出我的想象。
这个项目适用于 RSpec,我在下面添加了测试代码。
这是我的代码:
def translate(input)
pig_string = ''
if input[0] =~ /[aeiou]/
return input + 'ay'
elsif input[0] =~ /[^aeiou]/ && input[1] =~ /[aeiou]/
return input[1..-1] + input[0] + 'ay'
elsif input[0..1] =~ /[^aeiou]/
return input[2..-1] + input[0..1] + 'ay'
else
return input[0] + input + 'ay'
end
end
def translate_words(multi_words)
word_count = multi_words.split.size
if word_count > 1
multi_words.map! do |word|
translate(word)
end
end
end
RSpec:
it "translates two words" do
s = translate("eat pie")
expect(s).to eq("eatay iepay")
end
【问题讨论】:
-
在代码中包含您的输入、预期输出和实际输出。尽可能轻松地复制-粘贴-运行-查看。
-
您的代码只需稍作改动即可正常工作。请改用
multi_words.split.map!。 -
@bitsapien:“工作得非常好”——嗯,差不多。当字符串由一个单词组成时,它什么也不做。一个词串是多词串的一种特殊情况:)
-
我怀疑你也需要
join你的数组。 -
@bitsapien 感谢您的建议,但它仍在输出“eat pieay”。如果有帮助,我将在此处作为 Odin 项目的 Test-First Ruby 项目的一部分进行此操作:theodinproject.com/courses/web-development-101/lessons/…
标签: ruby