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