爲什麼不能正常工作?計算字符串中元音的函數
所有的def count_vowels(string)
result = 0
i = 0
while i < string.length
if string[i] == "a" ||"e" || "i" || "o" || "u"
result = result + 1
i += 1
end
return result
end
爲什麼不能正常工作?計算字符串中元音的函數
所有的def count_vowels(string)
result = 0
i = 0
while i < string.length
if string[i] == "a" ||"e" || "i" || "o" || "u"
result = result + 1
i += 1
end
return result
end
首先,你有一個end
缺少你if
。我想你想這樣做(這不會給你,雖然正確答案):
def count_vowels(string)
result = 0
i = 0
while i < string.length
if string[i] == "a" ||"e" || "i" || "o" || "u"
result = result + 1
i += 1
end
end
return result
end
嘗試使用正則表達式是這樣做的:
def count_vowels(string)
string.scan(/[aeouiAEIOU]/).count
end
/[aeouiAEIOU]/
是一個正則表達式,基本上意味着任何這些字符:a, e, o, u, i, A, E, I, O, U
。
String#scan方法返回字符串中該正則表達式的所有匹配項,這意味着您獲得元音的數量!
它不起作用,因爲它永遠是真的。 您的當前表達式評估爲(用文字表示)這個字母是否等於?如果這是錯誤的,那麼「e」它不評估等於「e」的第一個字母,它簡單地評估爲「e」。作爲一個if語句就相當於:
if string[i] == "a"
result += 1
i += 1
else
"e"
result += 1
i += 1
end
試試這個
%w(a e i o u).include?(string[i])
話雖這麼說,這將是更容易做到
string.scan(/[aeiou]/i).count
,然後你不需要循環在所有
...或'string.count'aeiouAEIOU''(或者應該是''aeiouAEIOUandsomtimesYY'')。 –
@CarySwoveland你是正確的(除了面露第二部分),但我寧願正則表達式或者'string.downcase.count(「AEIOU」)'因爲我不喜歡的需求如果你要解決輸入這兩種情況下 – engineersmnky
首先,除非您使用的是if
的後綴版本,否則應該用end
。又名:
if condition
action
end
所有第二,
string[i] == "a" ||"e" || "i" || "o" || "u"
翻譯什麼的是:string[i] == "a"
或"e"
或"i"
或"o"
或"u"
。在Ruby中,nil
和false
被認爲是falsey值,其他所有是truthy。
你在這裏的真正用意是什麼
if ['a', 'e', 'i', 'o',' u'].include? string[i]
result += 1
end
剛剛看到了所有的解決方案。我相信其中一些和我想象中的一樣好。其中一個答案中提到的問題之一是我錯過了我的if語句的結尾。這就是我所做的:
def count_vowels(string)
result = 0
i = 0
while i < string.length
if (string[i] == "a" || string[i] == "e" || string[i] == "i" || string[i] == "o" || string[i] == "u")
result = result + 1
end
i += 1
end
return result
end
你自己的問題,並將其作爲答案張貼,而忽略更多的慣用和更簡單的解決方案爲什麼然後你問這個問題?還有一些注意事項1)幾乎總是有一種更好的方式來循環使用ruby,而不是使用'for',''while','until'等循環(參見['String#chars']](http:// ruby -doc.org/core-2.2.0/String.html#method-i-chars))2)result = result + 1可能會導致+ = 1,就像您對i所做的一樣。 – engineersmnky
我無法自己解決它。我仍然會努力去理解爲什麼這樣做(string [i] ==「a」|| string [i] ==「e」|| string [i] ==「i」|| string [i] == 「o」|| string [i] ==「u」)與字符串[i] ==「a」||「e」||不同「我」|| 「o」|| 「U」。你們都幫助我理解它。 – jgozal
公平的學習是最重要的部分:) – engineersmnky
爲什麼反對票? – jgozal