我是Ruby编程语言的新手,请我制作一个执行以下操作的小程序: 规则1:如果单词以元音开头,则在单词末尾添加“ ay”声音。
规则2:如果单词以辅音开头,请将其移至单词末尾,然后在单词末尾添加“ ay”声音。
但是在我的if else语句中,即使它为true,它也不会进入else语句中
我已经尝试过将字符串转换为数组并在数组上工作,并尝试按原样在字符串上工作
def translate (str)
i = 0
while i < str.length
if (str[i] == "a" or str[i] == "e" or str[i] == "o" or str[i] == "u" or str[i] == "i")
str = str + "ay"
return str
else
temp = str[0...1]
str = str[1...str.length]
str = str + temp
end
i = i + 1
end
end
s = translate("banana")
puts s
程序完全不输入if语句,并一直进入else语句,直到单词返回相同而没有任何更改
答案 0 :(得分:0)
如果我对问题的理解正确,那么您根本不需要在此处循环。您只需要检查第一个字母,而不是所有字母。
def translate (str)
if str[0] == 'a' or str[0] == 'e' or str[0] == 'o' or str[0] == 'u' or str[0] == 'i'
str + 'ay'
else
temp = str[0...1]
str = str[1...str.length]
str = str + temp
str + 'ay'
end
end
顺便说一句,我能够使用调试器解决这个问题。你有没有尝试过?另外,对于您的原始代码,事实证明,对于某些输入(例如'baaan'
),您的else
语句执行。
答案 1 :(得分:0)
除了我建议使用||
instead of or
之外,您的方法不需要#while
迭代器,因为您只检查第一个字母。 if / else语句只能执行一次。
您还可以使用单个#include?
方法替换所有支票,如下所示:
def translate (str)
if %w[a e i o u].include?(str[0])
str + "ay"
else
str[1..-1] + str[0] + "ay"
end
end
请注意,由于将返回上次执行的行,因此我也删除了return
语句,因此上述方法中的第3行或第5行。
您还可以添加一个三元运算符以使其成为一行:
%w(a e i o u).include?(str[0]) ? str + "ay" : str[1..-1] + str[0] + "ay"
规则1:如果单词以元音开头,请向 这个词的结尾。
translate("ana")
# ~> "anaay"
规则2:如果单词以辅音开头,请将其移到 单词,然后在单词末尾添加“ ay”声音。
translate("banana")
# ~> "ananabay"
答案 2 :(得分:0)
在这种情况下,我没有发现or
或||
有问题。
我看到的问题是,如果起始字母是辅音,则在每次迭代时更改str旋转其字母(请参见代码的注释部分),因此起始字母永远不是元音。 / p>
然后,您最后缺少一个返回值,因此它不返回nil
和puts
。
def translate (str)
i = 0
while i < str.length
p str[i] # it's never a vowel
if (str[i] == "a" or str[i] == "e" or str[i] == "o" or str[i] == "u" or str[i] == "i")
str = str + "ay"
return str
else # here you are rotating the word
temp = str[0...1]
str = str[1...str.length]
str = str + temp
p str
end
i = i + 1
end
# missing a return value
end
s = translate("banana")
p s
因此它会打印出来:
# "b"
# "ananab"
# "n"
# "nanaba"
# "n"
# "anaban"
# "b"
# "nabana"
# "n"
# "abanan"
# "n"
# "banana"
# nil
万一第一个字母是元音,该代码可以正常工作,因此它可以输入if true
:
s = translate("ananas")
p s
#=> "ananasay"
顺便说一句,就像其他人已经发布的一样,您不需要任何while循环。只需使用if
语句检查第一个字母就可以了。