-1

嗨,我正在尝试编写将字符串转换为猪拉丁语的代码

def translate(str) 
   alpha = ('a'..'z').to_a
   vowels = %w[a e i o u]
   consonants = alpha - vowels

  if vowels.include?(str[0])
     str + 'ay'
  elsif str[0..1] == 'qu'
     str[2..-1]+'quay' 
  elsif consonants.include?(str[0]) && str[1..2]=='qu'
     str[3..-1]+str[0..2]+'ay' 
  elsif consonants.include?(str[0]) &&    consonants.include?(str[1]) && consonants.include?(str[2])
  str[3..-1] + str[0..2] + 'ay'
 elsif consonants.include?(str[0]) && consonants.include?(str[1])
   str[2..-1] + str[0..1] + 'ay'
elsif consonants.include?(str[0])
   str[1..-1] + str[0] + 'ay'
 elsif str[0..1] == 'qu'
 str[2..-1]+'quay'
else

  return str
  end
 end

此代码非常适合转换一个单词字符串,例如:translate("monkey")。我正在尝试做的是使此代码也可以接受多个单词(在同一字符串中)...按照上述转换为猪拉丁语的标准,例如: translate("please help") => “轻松玩 elphay”

非常感谢!

4

2 回答 2

0

我会为此做的是:

使用 #split 方法将您的 str 变量转换为单词数组(如果只有 1 个单词,则为 1 个单词)。

之后,您可以使用 array#each 方法遍历每个数组索引。IE

str = "hello"
str = str.split(" ") # str now equals ["hello"]

对于多个变量:

str = "hello world"
str- str.split(" ") #now equals ["hello", "world"]

那么你可以使用 .each 方法:

str.each do |<variable name you want to use>| 
   <how you want to manipulate the array>
   end

对于猪拉丁程序,您可以执行以下操作:

str.each do|element| 
  if vowels.include?(element)
    <do whatever you want here>
  elsif
    <do whatever>
  else 
    <do whatver>
  end
end

这将遍历数组中的每个元素并翻译它(如果只有一个元素它仍然可以工作)

于 2013-10-01T22:15:43.480 回答
0

既然你已经知道如何翻译一个单词,为什么不把任务分成两种方法:

def translate(str)
  str.split.map { |word| translate_word(word) }.join
end

def translate_word(str)
  # Your old translate code here
end
于 2013-02-11T04:59:36.037 回答