我的第一个功能中的错误在哪里?我有这个:
def fun(str):
for vowel in str:
if vowel in 'aeiouAEIOU':
return len(vowel)
def fun(str):
return len([vowel for vowel in str if vowel in 'aeiouAEIOU'])
print fun("halloo")
两个功能的结果不同。我必须返回字符串包含的元音数量。
答案 0 :(得分:3)
在您的第一个函数中,当您找到元音时,您会立即返回,并返回该元音的长度。结果始终为1
(找到元音)或None
(未找到元音)。
如果你想计算元音的数量,你必须使用一个新的变量来追踪这个数量:
def fun(str):
count = 0
for vowel in str:
if vowel in 'aeiouAEIOU':
count += 1
return count
第二个函数首先生成所有元音的列表,然后获取该列表的长度。你可以使用:
def fun(str):
return sum(1 for vowel in str if vowel in 'aeiouAEIOU')
甚至没有产生一个列表,只是一个元音计数。
答案 1 :(得分:2)
在此功能中,当您到达元音时,您将返回vowel
(单个字符)的长度 - 始终为1
(或者如果它下降函数None
)的结尾:
def fun(str):
for vowel in str:
if vowel in 'aeiouAEIOU':
return len(vowel)
在这一部分中,你要建立一个所有元音的列表并占用长度:
def fun(str):
return len([vowel for vowel in str if vowel in 'aeiouAEIOU'])
请注意str
是内置类型,最好调用参数text
以避免任何潜在的麻烦(不一定在此函数中,但供将来参考)将来
最终,您可以将其写为(使用更具描述性的名称和参数):
def vowel_count(text):
return sum(1 for ch in text.lower() if ch in 'aeiou')
答案 2 :(得分:1)
您的第一个代码将return 1
或None
:
def fun(str):
for vowel in str:
if vowel in 'aeiouAEIOU':
return len(vowel)
print fun('111') # return None
print fun('abc') # return 1
您的第二个代码可以返回元音中的字符数。
答案 3 :(得分:0)
使用count
字符串方法。时间复杂度为O(N) * 5
代码:
def countVowel(input):
input = input.lower()
count = input.count("a") + input.count("e") + input.count("i") +\
input.count("o") + input.count("u")
return count
print "Result:- ", countVowel("halloo")
print "Result:- ", countVowel("halloo HELLOO A ")
输出:
$ python test.py
Result:- 3
Result:- 7
按collections
模块。时间复杂度为O(N) * 5
代码:
import collections
def countVowel(input):
input = input.lower()
info = collections.Counter(input) #`O(N) * 5`
count = info["a"] + info["e"] + info["i"] + info["o"] + info["u"]
return count
print "Result:- ", countVowel("halloo")
print "Result:- ", countVowel("halloo HELLOO A ")
输出:
$ python test.py
Result:- 3
Result:- 7
通过正则表达式
代码:
import re
def countVowel(input):
input = input.lower()
count = len(re.findall("a|e|i|o|u", input))
return count
print "Result:- ", countVowel("halloo")
print "Result:- ", countVowel("halloo HELLOO A ")
输出:
$ python test.py
Result:- 3
Result:- 7
时间复杂度O(N)*1
代码:
def countVowel(input):
input = input.lower()
count = 0
for i in input:
if "aeiou".__contains__(i):
count += 1
return count
print "Result:- ", countVowel("halloo")
print "Result:- ", countVowel("halloo HELLOO A ")
输出:
$ python test.py
Result:- 3
Result:- 7