我想返回给定字符串参数中存在的元音量。这是我的代码:
def count_vowels(string)
new = string.split("")
number_of_vowels = 0
new.each do |letters|
if letters = "a" || letters = "e" || letters = "i" || letters = "o" || letters = "u" ||
numbers_of_vowels = number_of_vowels + 1
end
end
number_of_vowels
end
对于任何参数,number_of_vowels
都会返回0
。有什么建议吗?
答案 0 :(得分:2)
您需要检查与==
的平等性。 =
只是分配。
在这里 -
if letters = "a" ||
应为if letters == "a" ||
。
其余部分相同。
工作代码 -
def count_vowels(string)
new = string.split("")
number_of_vowels = 0
new.each {|letters| number_of_vowels += 1 if letters == "a" || letters == "e" || letters =="i" || letters == "o" || letters == "u"}
number_of_vowels
end
演示here。
答案 1 :(得分:2)
您的代码中存在三个问题。
首先,循环中的变量number_of_vowels
中有一个拼写错误。在那里,您将计数器增加到numbers_of_vowels
但从不再使用该变量(带有复数numbers
)。相反,您会返回仍为number_of_vowels
的{{1}}(带有单数number
)。
其次,0
=
将letters = "a"
分配给变量"a"
,它将一直返回 truish 。请使用a
来比较两个值是否相等。
第三,在==
条件的末尾有一个孤儿||
。导致以下行的原因是条件的一部分。因为第一个子句已经返回 truish ,所以从不评估计算。
这是固定版本的样子:
if
此外,您可能希望稍微简化一下代码:
def count_vowels(string)
new = string.split("")
number_of_vowels = 0
new.each do |letters|
if letters == "a" || letters == "e" || letters == "i" || letters == "o" || letters == "u"
number_of_vowels = number_of_vowels + 1
end
end
number_of_vowels
end