python,不同的代码结果

时间:2015-01-29 12:05:07

标签: python

我的第一个功能中的错误在哪里?我有这个:

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")

两个功能的结果不同。我必须返回字符串包含的元音数量。

4 个答案:

答案 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 1None

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