【问题标题】:Ruby pig latin translator for multiple words用于多个单词的 Ruby pig 拉丁语翻译器
【发布时间】:2025-12-12 21:30:02
【问题描述】:

我正在用 ruby​​ 创建一个猪拉丁语翻译器。它适用于大多数单词,但我在一次使用多个单词时遇到了一些麻烦。例如,当您输入单词“apple”时,您会得到“appleay”,但如果输入了多个单词,则不会翻译它们。我一直在寻找解决方案,但一无所获。这里的其他一些主题对让我走到这一步非常有帮助。任何提示将非常感谢。

我还在 if/else 语句中添加了几个例外,以允许对“quiet”和“square”进行正确的猪拉丁语翻译,其中“qu”被视为辅音。

提前感谢大家的帮助!

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

  if vowels.include?(word[0..0])
    word + 'ay'
  elsif consonants.include?(word[0..0]) && consonants.include?(word[1..1])
    word[2..-1] + word[0..1] + 'ay'
  elsif word[0..1] == "qu" 
    word[2..word.length]+"quay"
  elsif word[0..2] == "squ"
     word[3..word.length]+"squay"
  else consonants.include?(word[0])
    word[1..-1] + word[0..0] + 'ay'
  end

end

【问题讨论】:

    标签: ruby


    【解决方案1】:

    你可以这样做:

    Alpha = ('a'..'z').to_a
    Vowels = %w[a e i o u]
    Consonants = Alpha - Vowels
    
    def translate(word)
      if Vowels.include?(word[0])
        word + 'ay'
      elsif Consonants.include?(word[0]) && 
        Consonants.include?(word[1])
        word[2..-1] + word[0..1] + 'ay'
      elsif word[0..1] == "qu" 
        word[2..-1]+"quay"
      elsif word[0..2] == "squ"
         word[3..-1]+"squay"
      else Consonants.include?(word[0])
        word[1..-1] + word[0..0] + 'ay'
      end
    end
    
    puts "Enter some text to translate"
    text = fgets
    puts text.split.map(&method(:translate)).join(' ')
    

    【讨论】:

    • 我应该把代码放在哪里以获得正确的结果?将它放在 if/else 语句之前或之后会给我一个“堆栈级别太深”的错误。
    • 你可以把它放在方法体之外(即在你程序的最后一行),变量text是一个包含要翻译的输入词的字符串。
    • 那么在方法的最后一个“结束”之前?而对于“文本变量,它应该保持原样?我是否需要直接从那里的方法输入?
    • 更新了答案,以更清楚地说明如何将两者拼凑在一起。
    【解决方案2】:

    把它分解成多种方法怎么样?即将字符串分解成单词,然后将这些单词发送到另一个方法进行翻译,然后再将它们连接在一起并给出输出。

    def translator(sentence)
      words_to_translate = sentence.split(" ")
      translated_words = words_to_translate.map {|word| translate_word(word)}
      translated_sentence = translated_words.join(" ")
    end
    
    def translate_word(word)
      ...code here
      return a word
    end
    

    【讨论】:

      最近更新 更多