【问题标题】:Pig-Latin sentence猪拉丁句子
【发布时间】:2015-06-09 19:54:52
【问题描述】:

我正在尝试创建一个将字符串句子作为参数的方法,并将该句子翻译成猪拉丁语。我目前正试图用一种方法来完成这一切。

我可以很容易地做到这一点:

def pig_latin_word(word)
  vowels = %w(a e i o u)
  word_array = word.split('')
  if vowels.include?(word_array[0])
    word_array.join('')
  else
    until vowels.include?(word_array[0])
      word_array += word_array.shift(1)
    end
    word = word_array.join('')
    "#{word}ay"
  end
end

我现在想做同样的事情,但让方法带一个句子。这是我目前所拥有的:

def pig_latin_sentence(sentence)
  vowels = %w(a e i o u)
  sentence_array  = sentence.split.each_slice(1).map{|a| a.join('')}
  sentence_array.each do |word|
    if vowels.include?(word[0])
      sentence_array.join(' ')
    else
      until vowels.include?(word[0])
        word_array = word.split('')
        word_array += word_array.shift(1)
      end
      p sentence_array.join('ay ')
    end
  end
end

我最初是想把这个句子切分出来,这样我就可以把每个单词分开。然后我可以遍历一个数组,每个单词都是一个元素。但是,为了让我执行.shift 方法,我必须再次拆分每个字符串元素。我怎样才能做到这一点?

还有,有没有人有更简洁的单字写法?

【问题讨论】:

  • (1)句法应字法;这是问题的分解,是一个好主意。 (2) 单词方法应该只返回word,如果它以元音开头(虽然这不是正确的猪拉丁语,例如,“alien”应该是“alienay”),例如,return word if vowels.include?(word_array[0]) 等。关于句子方法那个“不起作用”——请描述失败以及你期望什么,而不是让它成为一个完整的问题。
  • @Dave 说得对。我和一个在 Boara Boara 长大的朋友确认了。
  • @CarySwoveland 呜呜呜!大声笑
  • @Dave, ethay ewnay ooklay isway, erway, eryvay ecomingbay。
  • "是作业吗".gsub(/\w+/){|e|"#{e=~/^([^aeiou]+)/i?$'+$&:e }哎"}

标签: arrays ruby string


【解决方案1】:

正如 Dave Newton 所说,让您的 pig_latin_word 处理单词。如果单词有问题,您会知道去哪里寻找;句子也是如此。

sentence.split.each_slice(1).map{|a| a.join('')}

是一个工作太努力的人的代码。

def pig_latin_sentence(sentence)
  pig_words = sentence.split.map do |word|
    pig_latin_word(word)
  end
  pig_words.join(" ")
end

【讨论】:

  • ...或sentence.gsub(/\w+/) { |w| pig_latin_word(w) }
【解决方案2】:

这是我为猪拉丁制作的解决方案,它有点短!

def pig_latin_ified(word)
  index = /[aeiou]/ =~ word
  return word if index == 0
  word_array = word.chars
  final_solution = (word_array + word_array.shift(index) + ["a", "y"]).join("")
end

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多