Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby pig拉丁红宝石翻译问题_Ruby - Fatal编程技术网

Ruby pig拉丁红宝石翻译问题

Ruby pig拉丁红宝石翻译问题,ruby,Ruby,你好,我的pig拉丁语代码有问题,我正在从Ruby学习第一个文件,我主要想做的是,如果一个单词以元音开头=>apple将变成appleay,如果它以辅音开头=>banana=>ananabay,如果它以两个辅音开头=>cherry=>errychay,它还可以翻译两个词=>eat pie将变成eatay iepay等等,下面是我的代码: def translate(string) vowels = [ "a" , "e" , "i" , "o" , "u"] alphabet

你好,我的pig拉丁语代码有问题,我正在从Ruby学习第一个文件,我主要想做的是,如果一个单词以元音开头=>apple将变成appleay,如果它以辅音开头=>banana=>ananabay,如果它以两个辅音开头=>cherry=>errychay,它还可以翻译两个词=>eat pie将变成eatay iepay等等,下面是我的代码:

def translate(string)

    vowels = [ "a" , "e" , "i" , "o" , "u"]
    alphabet = ("a" .. "z").to_a
    consonants = alphabet - vowels

    string_split = string.split

    string_split.map! do |w|
        if vowels.include?(w[0])
            w + 'ay'
        elsif consonants.include?(w[0]) &&

            consonants.include?(w[1])

            w [2..-1] + w [0..1]+ 'ay'

        elsif w [0..1] == "qu"

            w[2..-1] + "quay"

        elsif w[0..2] == "thr"

            w [3..-1]+"thray"

        elsif w[0..2]== "sch"

            w[3..-1]+"schay"

        elsif consonants.include?(w[0])

            w[ 1..-1] + w[0..0] + 'ay'
        else
                w

        end
    end

    return string_split.join(" ")

end
很简单,如果不是elseif


@mike当我尝试用ruby提示符运行它时,它说翻译一个以元音开头的单词失败-1First,启动irb并加载包含此代码的文件。然后,尝试测试它,看看它是否返回所需的输出。例如,您可以在irb中输入translateapple,查看它返回的内容。请提供完整的stacktrace和错误消息。我将其粘贴在pry中并获得translateallo;NoMethodError:main:Object OP的未定义方法'elseif',最好查看错误消息,然后您可以立即看到它不知道elseif,然后您可以立即看到错误。感谢我现在用elsifs修复了所有问题,并运行了程序,它工作到需要翻译三个辅音的程度,它说expected:eethray-get:reethay,但我的代码中有一行:elsif w[0..2]==thr w[3..-1]+thray,不确定为什么不是这样working@user3541885是的,但是你有两个辅音条件,在三个辅音条件之上,所以永远不会执行。ruby会按顺序尝试每一个条件。哦,我明白了,有没有一种方法可以重写代码,这样就可以接受任何条件?抱歉,我对ruby和一般编码都是新手,只需将两个辅音行放在底部,并考虑在每种情况下首先命中的是什么。要了解解决此问题的更有效方法,请阅读并查看哦,如果这个答案有帮助,请接受并投票。
def translate(string)

  vowels = [ "a" , "e" , "i" , "o" , "u"]
  alphabet = ("a" .. "z").to_a
  consonants = alphabet - vowels

  string_split = string.split

  string_split.map! do |w|
    if vowels.include?(w[0])
      w + 'ay'
    elsif consonants.include?(w[0]) &&

        consonants.include?(w[1])

      w [2..-1] + w [0..1]+ 'ay'

    elsif w [0..1] == "qu"

      w[2..-1] + "quay"

    elsif w[0..2] == "thr"

      w [3..-1]+"thray"

    elsif w[0..2]== "sch"

      w[3..-1]+"schay"

    else consonants.include?(w[0])

      w[ 1..-1] + w[0..0] + 'ay'


    end
  end

  return string_split.join(" ")

end